在Oracle中从select中插入循环

时间:2014-07-07 10:03:59

标签: sql oracle sql-insert

我成功插入1行,但我想使用循环插入行。目的是要插入table2中不存在的table1值。我的查询是这样的:

FOR cl1 IN (SELECT tb1.cl1 FROM table1 tb1 WHERE tb1.cl1 NOT IN(SELECT tb2.cl1 FROM table2 tb2))
LOOP
  INSERT INTO table2 VALUES (cl1,'123456',sysdate);
END LOOP

1 个答案:

答案 0 :(得分:1)

不需要循环:

INSERT INTO table2 
SELECT tb1.cl1, '123456', sysdate
FROM table1 tb1 
WHERE tb1.cl1 NOT IN(SELECT tb2.cl1 FROM table2 tb2)

如果列NOT IN包含cl1值,则使用NULL的子查询将无法正常工作。

明确列出insert语句中的所有列也被视为良好的编码风格:insert into table2 (col1, col2, col3) ...