2016-05-14 52 views
1

我试图查看许多主题已经尝试过,并且没有成功,如果弄清楚我的语法有什么问题。我试图采取一个表的独特值和循环插入到另一个表中,而id是auto_incrementing。这是我迄今为止的,我似乎无法弄清楚我做错了什么。我编写了2个程序。他们都“工作”,但没有。如何使用auto_increment在游标循环中插入和更新

谢谢你的帮助!

基本上我试图从一个表插入到另一个表,并使用AUTO_INCREMENT来生成我的build_id。我想填充表是:

permits.build_type 

build_id  INT    PK 
build_desc VARCHAR(200) 

而且代码:

DELIMITER // 

CREATE PROCEDURE building_list() 
BEGIN 
    DECLARE output VARCHAR(200); 
    DECLARE my_cursor CURSOR FOR 
     SELECT DISTINCT BUILDING_TYPE 
     FROM permits.edmonton_upto_10may2016_mostly_text; 

    OPEN my_cursor; 
    BEGIN 
    DECLARE EXIT HANDLER FOR NOT FOUND BEGIN END; 
    LOOP 
     FETCH my_cursor INTO output; 
     INSERT INTO permits.build_type (build_desc) VALUES (output); 
     UPDATE permits.build_type SET build_id = LAST_INSERT_ID(); 
    END LOOP; 
    END; 
    CLOSE my_cursor; 
END// 
+0

你好,非常感谢你!多么愚蠢的答案是如此简单....当我阅读你的答案时,我完全面对... – Erilyn

+0

很高兴能得到帮助 – e4c5

回答

0

为什么不直接使用一个简单的INSERT选择?

INSERT INTO built_type(build_desc) 
SELECT DISTINCT BUILDING_TYPE 
    FROM permits.edmonton_upto_10may2016_mostly_text; 
+0

对不起MySQL的新手,主要来自Oracle PLSQL,所以我正在理解它,因为我需要循环它,而auto_increment进去,或者如果我这样做插入选择,自动增量将只填充?我不需要打电话或任何东西? – Erilyn

+0

当您在自动列中放置空值时,它会被下一个自动增量值替换。 – e4c5