【发布时间】:2013-04-18 12:04:53
【问题描述】:
我已经声明游标并在过程主体中使用,然后我有动态 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;
【问题讨论】:
-
为什么需要动态创建表?通常,在 Oracle 中,您不必这样做,而是使用临时表。
-
是的,我正在创建一个临时表。
-
通常,在 Oracle 中,您只创建一次临时表并重新使用它(与 SQL Server 不同,在 SQL Server 中,动态创建和删除表很常见)。为什么需要动态创建表?在运行时这些列是否未知?
-
@Frank Schmitt - 是的,在朗姆酒时间之前,列名是未知的。但是,当其他用户运行存储过程时,它会出现错误,例如表已经存在。那么,我们应该怎么做呢?
-
您能否发布一个示例(过程输入、您为创建表而生成的 DDL 语句、预期输出),说明您要完成的工作?这听起来你根本不需要临时表(只需要一个带有动态生成语句的游标)