mysql 存储过程游标问题

今天用存储过程将一个表中的某几列的数据导入到另一张表中时候遇到一个问题,操作游标时候总是发现最后一行被多插入了一次,这是个常见问题了,原因就是当你发现not found data时候才set标志位=1的,这是until done=1还不能终止循环,直到下次循环进入done被设置为1,才终止循环,所以多循环了一次,我写在博客里面记录一下,方便大家。注意红色部分。

BEGIN
declare _id int;
declare _ad_id int;
declare _middle_page_id int;
declare _state tinyint;
declare _type tinyint;
declare _description varchar(255);
declare _start_time datetime;
declare _end_time datetime;
declare _offapp tinyint;
declare done int default 0;
declare cur cursor for select id,ad_id,middle_page_id,state,type,description,start_time,end_time,offapp from ap_ad_app;
declare continue handler for not found set done = 1;
open cur;
repeat
fetch cur into _id,_ad_id,_middle_page_id,_state,_type,_description,_start_time,_end_time,_offapp;
/*将数据insert到ap_aditem_ad*/
[color=red]if done <> 1 then[/color]
insert into ap_aditem_ad(aditem_id,ad_id,middle_page_id,state,type,description,start_time,end_time,offapp,create_time,update_time)
values(_id,_ad_id,_middle_page_id,_state,_type,_description,_start_time,_end_time,_offapp,now(),now());
end if;
until done=1
end repeat;
close cur;
END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值