OPEN~FETCH構文を使ってカーソル処理を行うサンプルです。
このカーソル処理は、明示カーソルと呼びます。
サンプル
ID | NAME | AGE |
---|---|---|
001 | 富田 | 25 |
002 | 山下 | 53 |
例)test_tblテーブルからカーソルで値を抽出して表示するサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
DECLARE --カーソルの定義 CURSOR c_cur IS SELECT * FROM test_tbl; --カーソルのROWTYPEを設定 rec c_cur%ROWTYPE; BEGIN --カーソルをOPENする OPEN c_cur; --カーソルをループする LOOP --カーソルから1行取り出しrecに格納する FETCH c_cur INTO rec; --データが存在しない場合はループを抜ける EXIT WHEN c_cur%NOTFOUND; --取得したデータを表示する DBMS_OUTPUT.PUT_LINE('ID ⇒' || rec.ID); DBMS_OUTPUT.PUT_LINE('NAME ⇒' || rec.NAME); DBMS_OUTPUT.PUT_LINE('AGE ⇒' || rec.AGE); END LOOP; --カーソルをCLOSEする CLOSE c_cur; END; |
DBMS_OUTPUTを使うには、事前に「set serveroutput on」を実行しておく必要があります。
- 実行結果
- ID ⇒001 NAME ⇒富田 AGE ⇒25 ID ⇒002 NAME ⇒山下 AGE ⇒53
名前付きカーソル属性
カーソルのOPEN~CLOSE内では、名前付きカーソル属性で様々な値を取る事ができます。
以下は名前付きカーソル属性の一覧です。
明示カーソル属性 | メモ |
---|---|
%ISOPEN | カーソルがOPENされている場合はTRUE |
%FOUND | 直前にフェッチした内容が存在する場合はTRUE |
%NOTFOUND | 直前にフェッチした内容が存在しない場合はTRUE |
%ROWCOUNT | カーソルの件数をを取得する |
解説
- 明示カーソル処理に対して、暗黙カーソル処理というものもあります。
詳しくは以下ページをご覧ください。
⇒ カーソルでFOR~IN処理を行う(暗黙カーソル)