Oracle 11gでは、PL/SQLコンテキスト終了関数/プロシージャが開いているカーソルを自動的に閉じます。多くの例で、Webユーザーがカーソルを開いたり閉じたりするのはなぜですか?
これは下位互換性ですか?
REF-CURSORはどうですか?手順を残してそれらも閉じますか?
カーソルを常に閉じる必要がある場合は、例外の処理についてはどうでしょうか。ブロックでは、EXCEPTION
すべてのカーソルをチェックしてからISOPEN
閉じる必要がありますか?
基本的なスクリプトは、自動クローズ機能を示しています。
DECLARE
PROCEDURE TEST IS
CURSOR CUR_CLIENTS IS SELECT DUMMY CL_ID FROM DUAL;
TYPE RT_CLIENTS IS TABLE OF CUR_CLIENTS%ROWTYPE;
LT_CLIENTS RT_CLIENTS;
BEGIN
IF CUR_CLIENTS%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('CLOSING CURSOR');
CLOSE CUR_CLIENTS;
END IF;
OPEN CUR_CLIENTS;
LOOP
FETCH CUR_CLIENTS BULK COLLECT INTO LT_CLIENTS LIMIT 1000;
EXIT WHEN LT_CLIENTS.COUNT = 0;
FOR I IN 1..LT_CLIENTS.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(LT_CLIENTS(I).CL_ID);
END LOOP;
END LOOP;
END TEST;
BEGIN
DBMS_OUTPUT.PUT_LINE('--------------------');
TEST;
DBMS_OUTPUT.PUT_LINE('--------------------');
TEST;
DBMS_OUTPUT.PUT_LINE('--------------------');
TEST;
DBMS_OUTPUT.PUT_LINE('--------------------');
END;