すべてのプロダクト
Search
ドキュメントセンター

PolarDB:カーソル変数のクローズ

最終更新日:Mar 29, 2026

結果セットを必要としなくなった時点で、オープン状態のカーソル変数が保持するリソースを解放するには、CLOSE 文を使用します。

カーソル変数は、クローズ時の動作において静的カーソルとは異なります。

カーソルの種類動作
静的カーソル再オープンする前に必ずクローズする必要があります。
カーソル変数再オープン前にクローズする必要はありません。OPEN ... FOR を既にオープン済みのカーソル変数に対して実行すると、以前の結果セットが破棄され、新しいクエリの結果セットで置き換えられます。

カーソル変数をクローズした後は、その結果セットへアクセスできなくなります。結果セットを必要としなくなった時点でカーソル変数をクローズし、基盤となるリソースを再利用可能にしてください。

以下のプロシージャでは、指定された部署の従業員レコードをフェッチし、ループ完了後にカーソル変数をクローズします。

CREATE OR REPLACE PROCEDURE emp_by_dept (
    p_deptno        emp.deptno%TYPE
)
IS
    emp_refcur      SYS_REFCURSOR;
    v_empno         emp.empno%TYPE;
    v_ename         emp.ename%TYPE;
BEGIN
    OPEN emp_refcur FOR SELECT empno, ename FROM emp WHERE deptno = p_deptno;
    DBMS_OUTPUT.PUT_LINE('EMPNO    ENAME');
    DBMS_OUTPUT.PUT_LINE('-----    -------');
    LOOP
        FETCH emp_refcur INTO v_empno, v_ename;
        EXIT WHEN emp_refcur%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(v_empno || '     ' || v_ename);
    END LOOP;
    CLOSE emp_refcur;
END;

部署番号 20 でプロシージャを実行します。

EXEC emp_by_dept(20)

期待される出力:

EMPNO    ENAME
-----    -------
7369     SMITH
7566     JONES
7788     SCOTT
7876     ADAMS
7902     FORD