任务描述
本关任务: 销售数据库有工作人员、销售单数据表 工作人员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 count int;
set count = 0;
select sum(sjfk) into count
from gzry join xsd on gzry.gyh=xsd.gyh
where gyxm=xm and nf=DATE_FORMAT(xsrq,'%Y') and yf=DATE_FORMAT(xsrq,'%m');
if count < 5000
then set pj="不达标";
elseif count < 10000
then set pj="达标";
elseif count >= 10000
then set pj="优秀";
else
set pj="无业绩";
end if;
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;