我想在不存在的表上声明游标.当然,我的程序没有编译.
此表是临时表,由预处理创建.它将存在于运行时,但在编译时它是另一个故事.
对于我选择/更新其他DML操作,我已经使用过了
从tmp_table’执行IMMEDIATE’操作’
但我找不到游标的解决方法.
有办法吗?
基本上,我希望这个编译
drop table test; /*from this on should compile*/ DECLARE cursor c is select * from test; BEGIN for reg in c LOOP /*...*/ END LOOP; END;
更新
到目前为止还没有编译:
sql> declare 2 c sys_refcursor; 3 BEGIN 4 open c for 'select * from pepito'; -- 'pepito' does not exist 5 close c; 6 end; 7 / declare * ERROR at line 1: ORA-00942: table or view does not exist ORA-06512: at line 4
应该使用CREATE PROCEDURE,谢谢.
提前致谢.
您应该能够像这样定义光标:
原文链接:https://www.f2er.com/oracle/205142.htmlDECLARE c SYS_REFCURSOR; BEGIN OPEN c FOR 'SELECT * FROM dual'; CLOSE c; END;
你也可以绑定参数:
OPEN c FOR 'SELECT * FROM dual WHERE DUMMY = :1' USING 'X';
有关详细信息,请参阅OPEN-FOR Statement的Oracle文档.
使用存储过程的示例
CREATE OR REPLACE PROCEDURE test IS c SYS_REFCURSOR; BEGIN OPEN c FOR 'SELECT * FROM fdfdfdfdfd'; CLOSE c; END; /