2015-12-17 103 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; 
相關問題