main:
begin
declare done int default 0;
declare tid varchar(50);
DECLARE cur CURSOR FOR select linkid from tmp_userservice_pool;
#parse order content to get every parameter
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
#SET AUTOCOMMIT=1;
delete from tmp_userservice_pool;
insert into tmp_userservice_pool select * from tb_userservice_pool where status=0 limit 100;
update tmp_userservice_pool set status=2;
update tb_userservice_pool set status=2 where linkid in (select linkid from tmp_userservice_pool);
open cur;
-- 打开游标
-- 循环所有的行
REPEAT
fetch cur into tid;
if(!done) then
call pcd_userservice_mvhisOne(tid);
end if;
UNTIL done
END REPEAT;
#commit;
close cur;
delete from tb_userservice_pool where linkid in (select linkid from tmp_userservice_pool);
end
;
我们需要注意以下几点
1,使用declare声明变量时,要注意用变量来存储表字段时,二者的字符编码要一致。
2,mysql的字符合并不能使用“+”,而要使用concat函数。
3,使用游标时,每个游标要使用不同DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;来控制游标的结束。
上面的这句代码的意思就是说,当没有返回数据时,程序继续执行,并把done设置为1.控制游标的结束
还有出现在select XX into XXX from tablename的时候发生的,这个时候如果XX是null就会有问题.其实也可以这样解决
select isnull(xxxx,0) into aaaa from tableName
这样如果遇到null就为0了..