您的位置:首页 > 数据库 > MySQL

使用mysql存储过程需要注意的

2017-07-23 11:20 639 查看
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了..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: