ここではPL/SQLのカーソル属性について紹介します。
目次
%ISOPEN属性
%ISOPEN属性は、カーソルがオープンされている場合はTRUEを戻します。オープンされていない場合はFALSEを戻します。
以下は%ISOPEN属性のサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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属性のサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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属性のサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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属性のサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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のカーソル属性ついて解説しました。