gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:49:32 26 4
gpt4 key购买 nike

我想在不存在的表上声明一个游标。当然,我的程序无法编译。

该表是临时表,由预处理创建。它会存在于运行时,但在编译时则是另一回事了。

对于我的选择/更新其他 DML 操作,我使用了

立即执行“来自 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
c SYS_REFCURSOR;
BEGIN
OPEN c FOR 'SELECT * FROM dual';
CLOSE c;
END;

您还可以绑定(bind)参数:

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;
/

关于Oracle PLSQL - 在不存在的表上声明游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1942072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com