数据库实验 | 第2关:建立和调用存储过程(带输出参数)

任务描述

本关任务:
销售数据库有工作人员、销售单数据表
工作人员gzry数据表有雇员号gyh、姓名gyxm、出生日期csrq、学历xl、工资gz、部门bm、电话dh字段
数据库实验 | 第2关:建立和调用存储过程(带输出参数)_第1张图片
销售单xsd数据表有销售单号xsdh、会员号hyh、雇员号gyh、销售日期xsrq、应付款yfk、实际付款sjfk字段
数据库实验 | 第2关:建立和调用存储过程(带输出参数)_第2张图片

任务要求

建立存储过程

ygyj(in nf int,in yf int,in xm varchar(10) out pj  varchar(10))

输入年份nf和月份yf和姓名xm ,输出对该工作人员的评价pj。
若该员工在指定年份和月份的销售业绩(销售单xsd的实际付款sjfk的合计)大于等于10000元,则返回优秀,大于等于5000元,则返回达标,大于0小于5000元返回不达标,若没有销售单则返回无业绩。

调用过程
以2015、7和王雅静为参数,调用ygyj过程,将结果存入@yj1
以2015、6和廖秉娴为参数,调用ygyj过程,将结果存入@yj2
以2015、7和赵敏为参数,调用ygyj过程,将结果存入@yj3
以2015、7和章伟为参数,调用ygyj过程,将结果存入@yj4


相关知识

参数列表

([in|out|inout proc_name type][,in|out|inout proc_name type])

过程可以没有参数或多个参数,多个参数之间用逗号分隔
IN输入参数,使数据可以传递给存储过程
OUT输出参数,用于需要返回结果
INOUT输入输出参数 既可以充当输入参数也可以充当输出参数

调用存储过程

CALL 存储过程(参数列表)

当有out参数时,可以用全局变量接收结果
全局变量以@开头,在mysql会话中一直有效

case多分支语句

CASE
WHEN   <条件1> THEN  <语句1>
WHEN   <条件2>   THEN <语句2>
……
[Else  <其他语句>]
END CASE 

代码

use sale;
#代码开始
delimiter $$
create procedure ygyj(in nf int, in yf int, in xm varchar(10), out pj varchar(10))
begin
    declare jg int;
    select sum(sjfk) from xsd join gzry on gzry.gyh = xsd.gyh where year(xsrq) = nf and month(xsrq) = yf and gyxm = xm into jg;
    case
        when isnull(jg) then set pj = "无业绩";
        when jg < 5000 then set pj = "不达标";
        when jg < 10000 then set pj = "达标";
        else set pj = "优秀";
    end case;
end $$
delimiter ;
call ygyj(2015, 7, "王雅静", @yj1);
call ygyj(2015, 6, "廖秉娴", @yj2);
call ygyj(2015, 7, "赵敏", @yj3);
call ygyj(2015, 7, "章伟", @yj4);
#代码结束
select @yj1,@yj2,@yj3,@yj4;

你可能感兴趣的:(数据库,数据库,mysql)