Oracle 我需要使用下面的代码将多个表数据插入到单个表中,我尝试了,但出现了错误

Oracle 我需要使用下面的代码将多个表数据插入到单个表中,我尝试了,但出现了错误,oracle,plsql,insert,dynamic-sql,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;

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

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

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

碰巧你的代码有几个明显的错误

  • 您似乎正在使用MS Word类型的智能引号
    ,而Oracle希望使用常规ASCII哑引号
    。因此,这将是一个编译错误
  • VARCHAR2的最大大小为32767,因此嵌套的table语句将抛出编译错误
  • 您需要在动态SQL中的关键字周围放置空格。否则会出现运行时错误。因此,
    “插入到”| |目标|选项卡| | |“值”
    需要
    “插入到”| |目标|选项卡| |“值”
    。确保检查所有字符串
  • 在PL/SQL中,赋值运算符是
    :=
    <代码>=是平等性的测试
  • 不太明显,但我们不能在FORALL中使用executeimmediate。它不是一个编程循环,需要是一个DML(SQL)语句:EXECUTE IMEMDIATE是PL/SQL。然而,你可以用它做同样的事情

    execute immediate
        'insert into '|| target_tab ||
       ' select * from '|| source_tab
    

    也许你能告诉我们你犯了什么错误?为什么标题询问多个表,而您只有一个源表?为什么要为此使用
    executeimmediate
    ?甚至任何PL/SQL?除了@APC在下面的帖子中指出的错误外,第8行中还存在一个问题,您在那里编写了
    query=
    。PL/SQL中的赋值运算符是
    :=
    ,应该在此行中使用,而不是
    =
    。此外,在第1行中,行的开头有一个不应该出现的单引号。分享和享受。