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