gpt4 book ai didi

oracle - 如何关闭 PL/SQL 中的返回游标?

转载 作者:行者123 更新时间:2023-12-04 13:54:39 25 4
gpt4 key购买 nike

我是 PL/SQL 的新手,在我的学习过程中刚接触到游标。我一直在看到类型为 OUT SYS_REFCURSOR 的存储过程参数据我所知,它的目的是像 C 语言中的指针一样“返回数据”。我想知道谁会关闭这样的SYS_REFCURSOR参数是否程序必须打开它而不能关闭它? (如果程序关闭了 OUT SYS_REFCURSOR,那么将没有任何数据要返回)。

另外,我认为,除了包含 OUT SYS_REFCURSOR 的存储过程之外,依赖外部函数是一种糟糕的设计。关闭游标的参数。有没有一种方法可以在不使用游标的情况下从存储过程返回表?

最佳答案

您需要做的就是在完成光标后在光标上发出 CLOSE ,而不管它实际打开的位置:

-- A function to return a SYS_REFCURSOR
CREATE OR REPLACE FUNCTION f_c RETURN SYS_REFCURSOR IS
cur SYS_REFCURSOR;
BEGIN
OPEN cur FOR SELECT LEVEL FROM dual CONNECT BY LEVEL < 10;
RETURN cur;
END;

这是一个示例运行:
DECLARE
cc SYS_REFCURSOR;
r VARCHAR2(10);
BEGIN
cc := f_c; -- Get the cursor from the function
LOOP
FETCH cc INTO r;
EXIT WHEN cc%NOTFOUND;
dbms_output.put_line('Output is: '||r);
END LOOP;
CLOSE cc; -- Close the SYS_REFCURSOR returned from the function
END;
/

Output is: 1
Output is: 2
Output is: 3
Output is: 4
Output is: 5
Output is: 6
Output is: 7
Output is: 8
Output is: 9

至于从函数或过程返回一组值,这里是另一个 SO question关于这个话题。

关于oracle - 如何关闭 PL/SQL 中的返回游标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6128101/

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