如果我输入我的源表名称,数据将复制到我们的目标表中:
'Create or Replace procedure p
(source_tab varchar2,target_tab varchar2)
As
query varchar2(200);
Type I_tab is table of varchar2(100000) index by binary_integer;
Rec_i I_tab;
Begin
query=’select * from’||source_tab;
Execute immediate query bulk collect into rec_i;
Forall i in rec_i.first..rec_i.last
Execute immediate’insert into’||target_tab||’values’||rec_i(i);
Commit;
End;
/
答案 0 :(得分:0)
如果没有任何有用的东西,比如实际的编译或运行时错误,我们可以做的就是猜测。
碰巧你的代码有几个明显的灯笼裤。
’
,而Oracle期望常规ASCII哑引号'
。所以那将是一个编译错误。’insert into’||target_tab||’values’
需要'insert into '||target_tab||' values '
。确保检查所有字符串。:=
; =
是对平等的考验。不太明显,但我们无法在FORALL中使用EXECUTE IMMEDIATE。它不是一个程序循环,它需要是一个DML(SQL)语句:EXECUTE IMEMDIATE是PL / SQL。但是你可以用
做同样的事情execute immediate
'insert into '|| target_tab ||
' select * from '|| source_tab