カーソルは、PL/SQL 内で記述された SELECT 構文に割り当てられます。定義された 「呼び名」で OPEN、FETCH、CLOSE という一般的なファイルの I/O と同様の処理を 行います。 FETCH 時に行データがメモリに受け渡されますが、そのメモリは事前に定義しておく 必要があります。このサンプルでは最も簡単な例として、定義されたカーソルと同じ フォーマットを持つレコード変数を定義しています COMMENT_REC cur_main%ROWTYPE; これ以外でも、列データを一つづつ FETCH の INTO 句に置く事もできます カーソルでは、cur_main%NOTFOUND という書式( または cur_main%FOUND ) で、条件 として利用して FETCH 後の処理を記述する事が可能です。
CREATE OR REPLACE PROCEDURE LIST_MEMBER ( /* カーソルの範囲指定用 */ PM_STRING IN VARCHAR2 ) /**********************************************************/ /* 変数の定義 */ /**********************************************************/ AS RET_VALUE VARCHAR2(2000); WK_VALUE VARCHAR2(2000); /* カーソルの定義(主に複数読み込み用) */ CURSOR cur_main IS SELECT * FROM 社員マスタ where 社員コード <= PM_STRING; /* cur_main に対応する社員マスタのフォーマット */ COMMENT_REC cur_main%ROWTYPE; /**********************************************************/ /* 処理開始 */ /**********************************************************/ BEGIN DBMS_OUTPUT.PUT_LINE('デバッグ:開始'); DBMS_OUTPUT.PUT_LINE('デバッグ:引数:'||PM_STRING); /* カーソルを開く */ OPEN cur_main; /* ループ処理(ブロック) */ LOOP /* 定義したレコード変数に読み込み */ FETCH cur_main INTO COMMENT_REC; /* カーソルに対するシステム変数でデータ終わりを判断 */ if cur_main%NOTFOUND then /* ループ処理を脱出 */ EXIT; end if; /* デバッグの表示(実際は更新処理等を行う */ DBMS_OUTPUT.PUT_LINE('結果:'||COMMENT_REC.氏名); END LOOP; /* カーソルを閉じる */ CLOSE cur_main; /**********************************************************/ /* 一番外側のブロックの例外処理 */ /**********************************************************/ $if 1=1 $then EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM); $end END;
関連する記事 PL/SQL : プロシージャの呼び出し Oracle : PL/SQL : Function のサンプルと使い方 PL/SQL : Function 雛形
|
【Oracle : PL/SQLの最新記事】
- PL/SQL : 最も簡単な CSV 出力 の記述
- PL/SQL : Function と Procedure の簡単なサンプル
- Oracle : PL/SQL Function の使用方法
- Oracle : PL/SQL : 暗黙のカーソルとループブロックを使用した自動行挿入
- Oracle : PL/SQL : SELECT 〜 INTO 構文の一般的な使用方法
- Oracle : PL/SQL : Function のサンプルと使い方
- PL/SQL : OUT タイプのパラメータを持つストアードプロシージャの処理
- PL/SQL : プロシージャの呼び出し
- PL/SQL : Function 雛形