2015-12-17 26 views
1

我想将所有记录从temp1表复制到另一个表中,我正在使用光标进行此操作。将不同记录从一个表复制到另一个表的光标

DELIMITER // 
    CREATE PROCEDURE cpyQ() 
    BEGIN 
     DECLARE g_id INT DEFAULT 0; 
     DECLARE v_fn varchar(100); 
     DECLARE v_ln varchar(100); 
     DECLARE v_email varchar(100); 

     declare tcursor for select distinct mailid,fname,lname from temp1; 
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1; 
     OPEN tcursor; 
    REPEAT 
      FETCH cursor into v_fn,v_ln, v_email; 
      insert into atom(type) values('Person'); 
      SET g_id = LAST_INSERT_ID(); 
      insert into user(id,fname,lname,mailid) values(g_id,v_fname,v_lname,v_email); 
    END REPEAT; 
     CLOSE tcursor; 
     END// 

    DELIMITER 

此代码显示错误

MySQL said: Documentation 
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'for select distinct mailid,fname,lname from temp1; 
     DECLARE CONTINUE HANDLE' at line 8 

如何解决这个

+0

我的目标是从一个表复制不同的数据到另一个表。我想另一个2表我需要光标 – xrcwrn

+0

http://stackoverflow.com/questions/34309376/store-procedure-to-copy-a-table-to-two-anoter-table我也试过这个代码,但这只是复制到原子表中不是给用户的 – xrcwrn

回答

1

你在你的语法各种错误,并没有退出循环。尝试这个?

CREATE PROCEDURE cpyQ() 
BEGIN 
    DECLARE g_id INT DEFAULT 0; 
    DECLARE v_fn varchar(100); 
    DECLARE v_ln varchar(100); 
    DECLARE v_email varchar(100); 
    DECLARE done INT DEFAULT FALSE; 

    declare tcursor cursor for select distinct mailid,fname,lname from temp1; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 
    OPEN tcursor; 
    read_loop: LOOP 
    FETCH tcursor into v_fn,v_ln, v_email; 
    if done then 
     LEAVE read_loop; 
    END IF; 
    insert into atom(type) values('Person'); 
    SET g_id = LAST_INSERT_ID(); 
    insert into user(id,fname,lname,mailid) values(g_id,v_fn,v_ln,v_email); 

    END LOOP; 
    CLOSE tcursor; 
END 
+0

是的这是工作。但我无法在复制时解析重复的条目。我们可以指定是否重复使其复制新条目? – xrcwrn

+0

对不起,我不明白你在问什么,特别是“让它复制新条目”的一部分。重复条目应该已被'distinct'过滤掉。请详细说明,也许改变你的问题,并附上重复样本和预期结果。 – Timekiller

+0

你的答案接近正确。我不希望从表中复制邮件副本,但调用上面的函数是showin。 'ERROR 1062(23000):'mailid'键重复输入'sharma' – xrcwrn

0

我尝试这个查询,发现这是工作

insert into atom(id,type) select id,'Person' from user1; 
    INSERT INTO user(id, fname, lname, mailid) SELECT id, fname, lname, mailid FROM user1; 
相关问题