1.话不多说
BEGIN
#Routine body goes here...
#定义 变量
DECLARE a int;
DECLARE b DECIMAL(11,2);
#此变可有可无,为了给个该存储函数执行成功后给个提示,运行下便知道
DECLARE str VARCHAR(300);
DECLARE x int;
#这个用于处理游标到达最后一行的情况
DECLARE s int default 0;
#声明游标cursor_name(cursor_name是个多行结果集)
DECLARE cursor_name CURSOR FOR select userid,agentmoney from agentlog where TO_DAYS(ctime)=TO_DAYS(DATE_SUB(CURDATE(),INTERVAL 1 DAY)) and state=0;
#设置一个终止标记
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
set @sta = 0;
SELECT state into @sta from config where id=5;
#如果为1,每天自动发放佣金,否则不执行执行
IF @sta > 0 THEN
set str = "--";
#打开游标
OPEN cursor_name;
#获取游标当前指针的记录,读取一行数据并传给变量a,b
fetch cursor_name into a,b;
#开始循环,判断是否游标已经到达了最后作为循环条件
while s <> 1 do
set str = concat(str,x);
UPDATE agentlog set state=1,updatetime=NOW() where userid=a and TO_DAYS(ctime)=TO_DAYS(DATE_SUB(CURDATE(),INTERVAL 1 DAY));
call update_rmb(a,0,b,1,11,'佣金结算');
#读取下一行的数据
fetch cursor_name into a,b;
end while;
#关闭游标
CLOSE cursor_name ;
select str;
END IF;
#语句执行结束
END