mysql存储过程

#判断游标是否存在,存在则删除
DROP PROCEDURE IF EXISTS statisticalMonthDetail;
#申明一个游标,并带输入参数
CREATE PROCEDURE statisticalMonthDetail (IN p_date varchar(100))

BEGIN

#申明一个游标的结束条件
declare done boolean;
#申明变量
DECLARE d_dateStatus date;
DECLARE d_userId VARCHAR(100);
DECLARE d_name VARCHAR(100);
DECLARE d_timeOvertime DOUBLE;
DECLARE d_subsidizedMeals int;

#申明游标
DECLARE
userCursor CURSOR FOR SELECT
d.dateStatus,
d.userId,
d.name,
SUM(d.timeOvertime),
SUM(d.lunch) + SUM(d.dinner)
FROM
a_status_detail d
WHERE
DATE_FORMAT(d.dateStatus, '%Y-%m') = DATE_FORMAT(p_date, '%Y-%m')
AND delFlag = 0
GROUP BY
d.userId ;

#每个游标必须使用不同的declare continue handler for not found set done=1来控制游标的结束
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

#打开游标
OPEN userCursor;

#循环游标
fetchIncomeLoop:LOOP
FETCH userCursor INTO d_dateStatus,d_userId,d_name,d_timeOvertime,d_subsidizedMeals;
#如果done为true,则游标结束
 if done then  
     leave fetchIncomeLoop;  
#如果done为false,则游标循环
 else       
    insert into a_status_detail_month (dateStatus,userId,name,timeOvertime,subsidizedMeals,dept,rest,lastRest,thisrest,delFlag,createTime,creator,updateTime,updator) 
values (d_dateStatus,d_userId,d_name,d_timeOvertime,d_subsidizedMeals,'运维开发部',0,0,0,0,SYSDATE(),'admin1',SYSDATE(),'admin1');
 end if; 

#游标循环结束
END LOOP;

#关闭游标
CLOSE userCursor;

END

--备注:

这一个简单的存储过程,统计一个月内的考勤记录(加班时间,餐补费用等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值