加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle PLSQL – 在不存在的表上声明游标

发布时间:2021-05-15 10:12:20 所属栏目:百科 来源:网络整理
导读:我想在不存在的表上声明游标.当然,我的程序没有编译. 此表是临时表,由预处理创建.它将存在于运行时,但在编译时它是另一个故事. 对于我选择/更新其他DML操作,我已经使用过了 从tmp_table’执行IMMEDIATE’操作’ 但我找不到游标的解决方法. 有办法吗? 基本

我想在不存在的表上声明游标.当然,我的程序没有编译.

此表是临时表,由预处理创建.它将存在于运行时,但在编译时它是另一个故事.

对于我选择/更新其他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,谢谢.

提前致谢.

您应该能够像这样定义光标:
DECLARE
  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;
/

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!