是否必须在PLSQL块中关闭游标
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否必须在PLSQL块中关闭游标相关的知识,希望对你有一定的参考价值。
请参阅以下程序。我没有关闭光标,它工作正常。我在这里错过了一些东西。是否必须关闭游标或Oracle自动关闭它?
CREATE OR REPLACE PROCEDURE pr_cursor_test IS
CURSOR emp_cur IS SELECT empno, ename FROM emp;
emprec emp_cur%rowtype;
BEGIN
OPEN emp_cur;
LOOP
FETCH emp_cur INTO emprec;
EXIT WHEN
emp_cur%notfound;
--Do Something
dbms_output.put_line(emprec.ename);
END LOOP;
END;
答案
This article on Oracle website非常清楚。
当您在包中声明游标(即,不在包的子程序内)并且游标被打开时,它将保持打开状态,直到您明确关闭它或您的会话终止。
当光标在声明部分(而不是在包中)声明时,Oracle数据库也会在声明它的块终止时自动关闭它。但是,自己明确关闭光标仍然是个好主意。如果将光标移动到包中,则现在已经具有必要的CLOSE。如果它是本地的,那么包括CLOSE声明也会向其他开发者和您的经理表明您正在关注。
在您的代码示例中,CURSOR被声明为过程的一部分(而不是包的一部分),这意味着,当过程执行完成时,游标会自动关闭。但是,如果你在代码中有CLOSE cursor
语句,那么对OPEN cursor
语句进行编码是最好的。它使代码在将来易于理解和支持。
以上是关于是否必须在PLSQL块中关闭游标的主要内容,如果未能解决你的问题,请参考以下文章