【问题标题】:How to create a table inside of a procedure in Oracle?如何在 Oracle 的过程中创建表?
【发布时间】:2014-02-09 13:26:47
【问题描述】:

我想在过程中创建一个表。我试图将创建查询放在一个字符串中,然后立即执行该字符串。例如:

create or replace procedure hr.temp is
   var1 varchar2(4000);
begin
   var1:='create table hr.temp(
          id number)';
   execute immediate var1;
end temp;

但是当我执行这个过程时,我得到了错误:

ORA-00911:无效字符
ORA-06512:在“SYS.TEMP”第 6 行
.
.
.

有什么办法可以做到吗?

【问题讨论】:

  • 在 SYS 帐户中创建过程。不要这样做。曾经。 (一旦将该过程移至适当的帐户:在动态 SQL 中,您不得指定 ; 字符。无论如何,立即执行只能执行一条语句,因此不需要终止字符)
  • 由于您的建议,我将其更改为 hr 架构,但结果是一样的
  • 我删除了; 字符,现在当我执行程序时,它开始但永远不会结束,就像程序在永远不会结束的循环中!
  • 您的示例仍然包括;。顺便说一句:您不能创建与现有过程同名的表。但除此之外,这应该可以正常工作:sqlfiddle.com/#!4/37847/2
  • @jalalrasooly 过程和表的名称应该是不同的,而不是相同的。你都改成temp2了吗?

标签: sql oracle stored-procedures create-table


【解决方案1】:

试试这个。它应该工作......

create or replace procedure hr.temp is
   var1 varchar2(4000);
BEGIN
   var1:='create table hr.temp2(
          id number)';
   EXECUTE IMMEDIATE var1;
end temp;

【讨论】:

    【解决方案2】:

    m.r 'a_horse_with_no_name' 的答案是正确的。第一点是我不应该在 sys 模式中创建表。

    第二点在动态sql中我不应该在动态sql中使用;字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 2011-06-01
      • 2018-02-23
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多