动态SQL和游标相关的问题

时间:2013-04-18 12:04:54

标签: plsql oracle11g

我已声明游标并在过程体中使用,然后我有动态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;

1 个答案:

答案 0 :(得分:0)

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

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

  -- open cursor

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

  -- do more with your cursor

有关自主交易的更多信息,请参阅Tim Hall的优秀网站上的this overview