如何解决如何在PL / SQL中关闭返回的游标?
| 我是PL / SQL的新手,只是在学习过程中碰到了光标。我一直在看类型为“ 0”的存储过程参数,据我所知,它的目的是“返回数据”,就像C语言中的指针一样。我想知道如果程序必须打开它而不能关闭它,谁将要关闭这样的“ 1”参数呢? (如果程序将输出ѭ0关闭,则将没有任何数据可返回)。 另外,我认为,依赖于包含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问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。