0

我已经声明游标并在过程主体中使用,然后我有动态 sql 语句,它可以动态创建一个表。之后我需要访问我声明的同一个游标。

当我尝试在执行动态 sql 语句之前打开游标时,它工作正常。

当我在执行动态 sql 语句后尝试打开游标时,它没有打开和游标。

请帮我。

谢谢你。

   create or replace procedure(columns varchar2)
   is
   column_names varchar2(100);
   sql_query varchar2(200);
   begin
       select pk_cols into column_names
       from rules where rule_column=columns;

       sql_query:='create global temporary table ('||column_names||')';
       execute immediate sql_query;
   end;
4

1 回答 1

0

创建表是 DDL,它在 Oracle 中会导致隐式提交,从而结束您的事务。

要解决此问题,您可以在自治事务中创建表:

  -- open cursor

  declare
    pragma autonomous_transaction;
  begin
    execute immediate 'create table ...';
  end;

  -- do more with your cursor

有关自主事务的更多信息,请参阅Tim Hall 优秀网站上的此概述。

于 2013-04-18T12:19:26.020 回答