大家好,我想问一个关于游标遍历插入新表出现主键重复的问题

ofblyt 2012-06-21 03:16:07
已经有表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如下

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 sqlstate '02000' set done = 1;
open cursor ;
repeat
fetch 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

...全文
106 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ofblyt 2012-06-21
  • 打赏
  • 举报
回复
谢谢,结贴[Quote=引用 7 楼 的回复:]

你的repeat先insert,再判断,当最后一条后not found,进入continue handler set done=1,然后再进入repeat,insert的时候就报主键冲突了,并且是最大的id 3,而后面的while是先判断,再insert,所有没有问题
[/Quote]
yumenfeiyu945 2012-06-21
  • 打赏
  • 举报
回复
改成这样试下
open cursor ;
fetch cursor into v_a,v_b,v_c;
repeat
insert tablea (a,b,c) values (v_a,v_b,v_c);
fetch cursor into v_a,v_b,v_c;
until done end repeat;
yumenfeiyu945 2012-06-21
  • 打赏
  • 举报
回复
你的repeat先insert,再判断,当最后一条后not found,进入continue handler set done=1,然后再进入repeat,insert的时候就报主键冲突了,并且是最大的id 3,而后面的while是先判断,再insert,所有没有问题
ofblyt 2012-06-21
  • 打赏
  • 举报
回复
这个确实没错,不过我想请教一下,为什么我用repeat就不行啊
[Quote=引用 5 楼 的回复:]

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 ……
[/Quote]
wwwwb 2012-06-21
  • 打赏
  • 举报
回复
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
ofblyt 2012-06-21
  • 打赏
  • 举报
回复
呃,不好意思,b表写错了
实际上b表的结构是 d e f
1 2 3
2 2 3
3 2 3
wwwwb 2012-06-21
  • 打赏
  • 举报
回复
SELECT v_a,v_b,v_c
看看结果,已经提示,主键重复
ofblyt 2012-06-21
  • 打赏
  • 举报
回复
运行之后出现错误:duplicate entry '3' for key 'PRIMARY'
wwwwb 2012-06-21
  • 打赏
  • 举报
回复
什么问题

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧