我需要使用下面的代码将多个表数据插入到单个表中,但我有错误

时间:2014-06-16 07:02:09

标签: oracle plsql insert dynamic-sql

如果我输入我的源表名称,数据将复制到我们的目标表中:

'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;
/

1 个答案:

答案 0 :(得分:0)

如果没有任何有用的东西,比如实际的编译或运行时错误,我们可以做的就是猜测。

碰巧你的代码有几个明显的灯笼裤。

  1. 您似乎使用MS Word类型智能引号,而Oracle期望常规ASCII哑引号'。所以那将是一个编译错误。
  2. VARCHAR2的最大大小为32767,因此您的嵌套表语句将引发编译错误。
  3. 您需要在动态SQL中的关键字周围添加空格。否则,您将收到运行时错误。因此’insert into’||target_tab||’values’需要'insert into '||target_tab||' values '。确保检查所有字符串。
  4. 在PL / SQL中,赋值运算符为:=; =是对平等的考验。
  5. 不太明显,但我们无法在FORALL中使用EXECUTE IMMEDIATE。它不是一个程序循环,它需要是一个DML(SQL)语句:EXECUTE IMEMDIATE是PL / SQL。但是你可以用

    做同样的事情
    execute immediate
        'insert into '|| target_tab ||
       ' select * from '|| source_tab