带有连接的FOR LOOP插入语句

时间:2017-08-01 11:26:05

标签: oracle loops insert

我从1小时后就一直在努力找出为什么这不起作用我最后说'跟地狱一起去,我正在前往stackoverflow':)

BEGIN
 FOR c IN ( SELECT ID FROM projects where id <4 )
 LOOP
   EXECUTE IMMEDIATE 'insert into project_tools(pj_id,tool_id) values(' || c || ',81)' ;
 END LOOP;
END;

我试过很多变种,但没有运气! 你能告诉我上面这个街区有什么问题吗? 谢谢!

2 个答案:

答案 0 :(得分:3)

我明白了,你不应该使用循环,你可以在一个语句中解决它 - &gt;

  insert /*+ append */ into project_tools(pj_id,tool_id)
  select /*+ parallel(8) */ ID, 81 from projects where id < 4;

(并行只在EE中工作,程度可以是任何高,oracle会处理它) 在执行insert:

之前,您可以使用“使会话并行”
alter session enable parallel dml parallel 10;

答案 1 :(得分:1)

也许是这样的;

 declare sql_text varchar(2000);
    BEGIN
     FOR c IN ( SELECT ID FROM projects where id <4 )
     LOOP
       sql_text := 'insert into project_tools(pj_id,tool_id) values(' || c || ',81)' ;
    EXECUTE IMMEDIATE sql_text;
     END LOOP;
    END;