Tom*_*Tom 7 oracle plsql cursor ora-00942
我想在不存在的表上声明游标.当然,我的程序没有编译.
此表是临时表,由预处理创建.它将存在于运行时,但在编译时它是另一个故事.
对于我选择/更新其他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;
Run Code Online (Sandbox Code Playgroud)
到目前为止还没有编译:
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
Run Code Online (Sandbox Code Playgroud)
应该使用CREATE PROCEDURE,谢谢.
提前致谢.
您应该能够像这样定义光标:
DECLARE
c SYS_REFCURSOR;
BEGIN
OPEN c FOR 'SELECT * FROM dual';
CLOSE c;
END;
Run Code Online (Sandbox Code Playgroud)
您还可以绑定参数:
OPEN c FOR 'SELECT * FROM dual WHERE DUMMY = :1' USING 'X';
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅OPEN-FOR语句的Oracle文档.
使用存储过程的示例
CREATE OR REPLACE PROCEDURE test IS
c SYS_REFCURSOR;
BEGIN
OPEN c FOR 'SELECT * FROM fdfdfdfdfd';
CLOSE c;
END;
/
Run Code Online (Sandbox Code Playgroud)