Kap*_*pil 2 oracle cursor fetch
请参阅以下过程。我没有关闭光标,它工作正常。我在这里错过了什么吗?是强制关闭游标还是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;
Run Code Online (Sandbox Code Playgroud)
Oracle网站上的这篇文章说的很清楚。
当您在包中(即不在包的子程序内)声明游标并且打开游标时,它将保持打开状态,直到您显式关闭它或终止会话。
当游标在声明部分(而不是在包中)声明时,Oracle 数据库也会在声明它的块终止时自动关闭它。然而,自己显式关闭游标仍然是一个好主意。如果光标移至某个包,则现在所需的 CLOSE 已就位。如果是本地的,那么包含 CLOSE 语句也会向其他开发人员和您的经理表明您正在关注。
在您的代码示例中, CURSOR 被声明为过程的一部分(而不是包的一部分),这意味着,当过程执行完成时,游标会自动关闭。然而,如果代码中CLOSE cursor有声明,最好的编码实践是声明。OPEN cursor它使代码在未来易于理解和支持。
| 归档时间: |
|
| 查看次数: |
4333 次 |
| 最近记录: |