【发布时间】:2010-12-28 20:42:55
【问题描述】:
我想在一个不存在的表上声明一个游标。当然,我的程序没有编译。
此表为临时表,由预处理创建。它将存在于运行时,但在编译时是另一回事。
对于我的选择/更新其他 DML 操作,我使用了
EXECUTE IMMEDIATE 'operation from tmp_table'
但我找不到光标的解决方法。
有办法吗?
基本上,我希望它能够编译
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,谢谢。
提前致谢。
【问题讨论】:
-
您得到了异常,因为您实际运行了代码。将
declare替换为CREATE PROCEDURE test_cursor AS以编译代码。 -
TOAD 没有编译按钮。 :S 这应该是微不足道的!!!
-
"DECLARE..BEGIN..END;/" 表示“编译并运行这个匿名块”。这就是你得到 ORA-00942 的原因。 CREATE PROCEDURE ...;/" 的意思是“编译并创建这个过程”。在你调用这个过程之前,你不会得到 ORA-00942。
标签: oracle plsql database-cursor ora-00942