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 件のコメント:
コメントを投稿