已经有表tablea:a(主键) b c,有另外一张原始表tableb: d(主键)e fd 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 

解决方案 »

  1.   

    运行之后出现错误:duplicate entry '3' for key 'PRIMARY'
      

  2.   

    SELECT  v_a,v_b,v_c
    看看结果,已经提示,主键重复
      

  3.   

    呃,不好意思,b表写错了
    实际上b表的结构是 d e f
                      1 2 3
                      2 2 3
                      3 2 3
      

  4.   

    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 
      

  5.   

    这个确实没错,不过我想请教一下,为什么我用repeat就不行啊
      

  6.   

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

  7.   

    改成这样试下
    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;