前回までのカーソルの使い方についてはコチラ
PLSQL SELECTの結果を取得する~取得結果が複数行の場合~
PLSQL カーソルを使用してデータを取得する
PLSQL パラメータ付きカーソル
今回はカーソルの属性についてです。
カーソルには下記の表のような属性があります。
「カーソル名%属性名」とすることで、属性の値をを取得できます。
属性 | 意味 |
FOUND | カーソルを実行した結果、該当するものがあったかどうか |
NOTFOUND | FOUNDの逆値 |
ISOPEN | カーソルが開いているかどうか |
ROWCOUNT | カーソルを処理した結果、処理された行数SELECTの場合フェッチした件数 |
カーソル属性を確認するために、複数件の結果を返すSELECT文で各属性を出力するコードを実行してみました。
DECLARE
CURSOR cur IS
SELECT * FROM Member;
rec cur%Rowtype;
BEGIN
--カーソル状態出力
If (cur%ISOPEN) THEN
SYS.DBMS_OUTPUT.PUT_LINE('カーソルオープン前:ISOPEN=true');
ELSE
SYS.DBMS_OUTPUT.PUT_LINE('カーソルオープン前:ISOPEN=false');
END IF;
--カーソルオープン
OPEN cur;
--カーソル状態出力
If (cur%ISOPEN) THEN
SYS.DBMS_OUTPUT.PUT_LINE('カーソルオープン後:ISOPEN=true');
ELSE
SYS.DBMS_OUTPUT.PUT_LINE('カーソルオープン後:ISOPEN=false');
END IF;
LOOP
FETCH cur INTO rec;
If (cur%NOTFOUND) THEN
SYS.DBMS_OUTPUT.PUT_LINE('NOTFOUND = true');
EXIT;
END IF;
SYS.DBMS_OUTPUT.PUT_LINE('フェッチした件数:ROWCOUNT=' || cur%ROWCOUNT);
SYS.DBMS_OUTPUT.PUT_LINE(rec.MemberId || ' ' || rec.MemberName);
END LOOP;
--カーソルクローズ
CLOSE cur;
--カーソル状態出力
If (cur%ISOPEN) THEN
SYS.DBMS_OUTPUT.PUT_LINE('カーソルクローズ後:ISOPEN=true');
ELSE
SYS.DBMS_OUTPUT.PUT_LINE('カーソルクローズ後:ISOPEN=false');
END IF;
END;
出力結果です。
カーソルオープン前:ISOPEN=false
カーソルオープン後:ISOPEN=true
フェッチした件数:ROWCOUNT=1
1 Yamada
フェッチした件数:ROWCOUNT=2
2 Tanaka
フェッチした件数:ROWCOUNT=3
3 Suzuki
NOTFOUND = true
カーソルクローズ後:ISOPEN=false
同じく、カーソルFORループで各属性を出力するコードを実行してみました。
DECLARE
CURSOR cur IS
SELECT * FROM Member;
BEGIN
FOR rec IN cur LOOP
--カーソルISOPEN=出力
If (cur%ISOPEN) THEN
SYS.DBMS_OUTPUT.PUT_LINE('ISOPEN=true');
ELSE
SYS.DBMS_OUTPUT.PUT_LINE('ISOPEN=false');
END IF;
--カーソルROWCOUNT出力
SYS.DBMS_OUTPUT.PUT_LINE('フェッチした件数:ROWCOUNT=' || cur%ROWCOUNT);
SYS.DBMS_OUTPUT.PUT_LINE(rec.MemberId);
END LOOP;
--カーソルISOPEN=出力
If (cur%ISOPEN) THEN
SYS.DBMS_OUTPUT.PUT_LINE('ISOPEN=true');
ELSE
SYS.DBMS_OUTPUT.PUT_LINE('ISOPEN=false');
END IF;
END;
出力結果です。
ISOPEN=true
フェッチした件数:ROWCOUNT=1
1
ISOPEN=true
フェッチした件数:ROWCOUNT=2
2
ISOPEN=true
フェッチした件数:ROWCOUNT=3
3
ISOPEN=false
0 件のコメント:
コメントを投稿