ここではPL/SQLのカーソル属性について紹介します。
目次
%ISOPEN属性
%ISOPEN属性は、カーソルがオープンされている場合はTRUEを戻します。オープンされていない場合はFALSEを戻します。
以下は%ISOPEN属性のサンプルです。
CREATE OR REPLACE PROCEDURE PROC_SAMPLE
IS
CURSOR c1 IS SELECT * FROM emp;
BEGIN
OPEN c1;
IF c1%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('カーソルがOPNEされています。');
ELSE
DBMS_OUTPUT.PUT_LINE('カーソルがOPNEされていません。');
END IF;
CLOSE c1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error');
END;
/
%FOUND属性
%FOUND属性は、カーソルがオープンされてから最初のフェッチまでNULLを戻します。 その後、直前のフェッチが行を戻した場合はTRUEを戻し、直前のフェッチが行を戻さなかった場合はFALSEを戻します。
以下は%FOUND属性のサンプルです。
CREATE OR REPLACE PROCEDURE PROC_SAMPLE
IS
CURSOR c1 IS SELECT * FROM emp;
wRec emp%ROWTYPE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO wRec;
IF c1%FOUND THEN
DBMS_OUTPUT.PUT_LINE(wRec.emp_no || ':' || wRec.emp_name);
ELSE
EXIT;
END IF;
END LOOP;
CLOSE c1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error');
END;
/
%NOTFOUND属性
%NOTFOUND属性は、カーソルがオープンされてから最初のフェッチまではNULLを戻します。 その後、直前のフェッチが行を戻した場合はFALSEを戻し、直前のフェッチが行を戻さなかった場合はTRUEを戻します。
以下は%NOTFOUND属性のサンプルです。
CREATE OR REPLACE PROCEDURE PROC_SAMPLE
IS
CURSOR c1 IS SELECT * FROM emp;
wRec emp%ROWTYPE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO wRec;
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(wRec.emp_no || ':' || wRec.emp_name);
END LOOP;
CLOSE c1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error');
END;
/
%ROWCOUNT属性
%ROWCOUNT属性は、カーソルがオープンされると0(ゼロ)になります。 最初のフェッチまでは0(ゼロ)を戻します。その後は、これまでにフェッチした行数を戻します。
以下は%ROWCOUNT属性のサンプルです。
CREATE OR REPLACE PROCEDURE PROC_SAMPLE
IS
CURSOR c1 IS SELECT * FROM emp;
wRec emp%ROWTYPE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO wRec;
IF c1%FOUND THEN
DBMS_OUTPUT.PUT_LINE(wRec.emp_no || ':' || wRec.emp_name);
ELSE
EXIT;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE ('データ件数=' || c1%ROWCOUNT);
CLOSE c1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error');
END;
/
以上、PL/SQLのカーソル属性ついて解説しました。