我从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;
我试过很多变种,但没有运气! 你能告诉我上面这个街区有什么问题吗? 谢谢!
答案 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;