今天用存储过程将一个表中的某几列的数据导入到另一张表中时候遇到一个问题,操作游标时候总是发现最后一行被多插入了一次,这是个常见问题了,原因就是当你发现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