显式打开和关闭游标

fra*_*ras 0 database oracle plsql cursors

我一直在阅读数据库游标,我看到的每一个示例代码都明确打开并关闭游标.我只使用过几次而且我从来没有这样做过.谁能告诉我为什么有必要这样做?我知道如果你不关闭光标你可以创建内存泄漏,但我从来没有打开过.

谢谢

Vin*_*rat 6

你只需要打开和关闭显式游标.隐式游标具有由Oracle自动管理的优势.隐式游标的示例:

DECLARE
   l_dept dept%rowtype;
BEGIN
   -- implicit SELECT INTO
   SELECT * INTO l_dept FROM dept WHERE deptno = :deptno;
   -- implicit LOOP
   FOR cc IN (SELECT emp.* FROM emp WHERE deptno = l_dept.deptno) LOOP
      dbms_output.put_line('emp='||cc.empno);
   END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud)

隐式游标在代码中更简洁,您不必担心关闭它们.我还发现将光标的代码放在实际使用的位置更清楚.我很少使用显式游标,并且只有它们可以在包中的许多地方重用(那么为什么不把它放在一个proc中?).