【问题标题】:I Need to Insert a multiple tables data into single table using below code i tried but i have error我需要使用下面的代码将多个表数据插入到单个表中,但我有错误
【发布时间】:2014-06-16 07:02:08
【问题描述】:

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

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

【问题讨论】:

  • 或许您可以告诉我们您遇到的什么错误?为什么标题询问多个表,你只有一个源表?你为什么要为此使用execute immediate?甚至是任何 PL/SQL?
  • 除了下面@APC 的帖子中提到的错误之外,在第8 行您写query= 的地方也存在问题。 PL/SQL 中的赋值运算符是:=,应该在这一行中使用而不是=。此外,在第 1 行中,该行的开头有一个不应该存在的单引号。分享和享受。

标签: oracle plsql insert dynamic-sql


【解决方案1】:

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

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

  1. 您似乎正在使用 MS Word 类型的智能引号 ,而 Oracle 需要常规的 ASCII 哑引号 '。所以这将是一个编译错误。
  2. VARCHAR2 的最大大小为 32767,因此您的嵌套表语句将引发编译错误。
  3. 您需要在动态 SQL 中的关键字周围放置空格。否则你会得到一个运行时错误。所以 ’insert into’||target_tab||’values’ 需要 'insert into '||target_tab||' values ' 。确保检查所有字符串。
  4. 在 PL/SQL 中,赋值运算符是 :== 是相等性的测试。

不太明显,但我们不能在 FORALL 中使用 EXECUTE IMMEDIATE。这不是程序循环,它需要是 DML (SQL) 语句:EXECUTE IMEMDIATE 是 PL/SQL。但是你可以用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2020-05-20
    相关资源
    最近更新 更多