是否必须在PLSQL块中关闭游标

问题描述 投票:1回答:1

请参阅以下程序。我没有关闭光标,它工作正常。我在这里错过了一些东西。是否必须关闭游标或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;
oracle cursor fetch
1个回答
1
投票

This article on Oracle website非常清楚。

当您在包中声明游标(即,不在包的子程序内)并且游标被打开时,它将保持打开状态,直到您明确关闭它或您的会话终止。

当光标在声明部分(而不是在包中)声明时,Oracle数据库也会在声明它的块终止时自动关闭它。但是,自己明确关闭光标仍然是个好主意。如果将光标移动到包中,则现在已经具有必要的CLOSE。如果它是本地的,那么包括CLOSE声明也会向其他开发者和您的经理表明您正在关注。

在您的代码示例中,CURSOR被声明为过程的一部分(而不是包的一部分),这意味着,当过程执行完成时,游标会自动关闭。但是,如果你在代码中有CLOSE cursor语句,那么对OPEN cursor语句进行编码是最好的。它使代码在将来易于理解和支持。

© www.soinside.com 2019 - 2024. All rights reserved.