In Oracle 11g when PL/SQL context finishing function/procedure automatically close opened cursors. Why in many examples over the web users opening and closing their cursors?
Is this backward compatibility ?
What about REF-CURSORs ? Leaving procedure close them also ?
If cursor should be closed always what about handling exceptions? In EXCEPTION
block do I have to check all cursors ISOPEN
and then close them?
Basic script demonstrates auto-closing feature:
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;