任务描述
本关任务:
销售数据库有工作人员、销售单数据表
工作人员gzry数据表有雇员号gyh、姓名gyxm、出生日期csrq、学历xl、工资gz、部门bm、电话dh字段
销售单xsd数据表有销售单号xsdh、会员号hyh、雇员号gyh、销售日期xsrq、应付款yfk、实际付款sjfk字段
任务要求
建立存储过程
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;