读书人

大家好小弟我想问一个关于游标遍历插

发布时间: 2012-06-22 16:16:32 作者: rapoo

大家好,我想问一个关于游标遍历插入新表出现主键重复的问题
已经有表tablea:a(主键) b c,有另外一张原始表tableb: d(主键)e f

d e f a b c
1 2 3 null null null
1 2 3
1 2 3

我的sql如下

SQL code
begindeclare v_a text;declare v_b text;declare v_c text;declare done int;declare cursor for select * from table;declare continue handler for sqlstate '02000' set done = 1;open cursor ;repeatfetch cursor into v_a,v_b,v_c;insert tablea (a,b,c) values (v_a,v_b,v_c);until done end repeat;close cursor;end 



[解决办法]
begin
declare v_a text;
declare v_b text;
declare v_c text;
declare done int;
declare cursor for select * from table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
open cursor ;
fetch cursor into v_a,v_b,v_c;
WHILE done=0 DO
insert tablea (a,b,c) values (v_a,v_b,v_c);
fetch cursor into v_a,v_b,v_c;
END WHILE;
close cursor;
end

[解决办法]
你的repeat先insert,再判断,当最后一条后not found,进入continue handler set done=1,然后再进入repeat,insert的时候就报主键冲突了,并且是最大的id 3,而后面的while是先判断,再insert,所有没有问题

读书人网 >Mysql

热点推荐