Oracle PL/SQL でのカーソルの初歩の初歩です。この辺り、初めて触る方はマジでつまずくので、初心者向けにメモしておきます。
カーソルの基本形
恐らく、このページにたどり着いた人は、PL/SQL初心者か、復習したい人か、ど忘れしてしまった人のいずれかです。なので、超シンプルなカーソルの基本形を書いておきます。
DECLARE
-- カーソル宣言(データを取得して、カーソルという箱にぶっこむ)
CURSOR カーソル名 IS
SELECT カラム1, カラム2
FROM テーブル
WHERE 条件;
-- カーソルのレコード型宣言
my_record my_cursor%ROWTYPE;
BEGIN
-- カーソルをオープン(閉じたままでは使えない)
OPEN my_cursor;
-- カーソルからデータをフェッチして処理
FETCH my_cursor INTO my_record;
-- フェッチしたデータの処理
--※ここに色々処理を書いたりする
-- カーソルをクローズ(開けたら閉じる)
CLOSE my_cursor;
END;
/
とまあこんな具合です。
DECLARE と BEGIN ですが、カーソルを使用する場合のサンプルコード上の大きくは次の役割です。
- DECLARE 部:変数やカーソルを作る
- BEGIN 部:変数やカーソルを使って処理する
かなり乱暴ですが、詳しく書くと際限がないので、とりあえずこんな感じでOK。
SELECTしたデータをカーソルに入れる
この記事の本題ですが、SELECTしたデータをカーソルに入れたいということです。テストデータはコチラを使います。
【SQL】テストデータ(都道府県コード・地方コード)
都道府県コードと地方コードのテストデータです。
上記テストデータから、関東と近畿の都道府県をカーソルに入れて、それをひたすらコンソール出力するという、PL/SQLのサンプルコードを書いてみました。
DECLARE -- カーソル宣言 CURSOR my_cursor IS SELECT PREF.PREF_CODE , PREF.PREF_NAME , REG.REGION_NAME FROM PREF_TABLE PREF INNER JOIN REGION_TABLE REG ON REG.REGION_CODE = PREF.REGION_CODE WHERE REG.REGION_CODE IN ('KNT', 'KNK'); -- カーソルのレコード型宣言 my_record my_cursor%ROWTYPE; BEGIN -- カーソルをオープン OPEN my_cursor; -- カーソルからデータをフェッチして処理 LOOP FETCH my_cursor INTO my_record; EXIT WHEN my_cursor%NOTFOUND; -- データの処理 DBMS_OUTPUT.PUT_LINE('都道府県:' || my_record.PREF_NAME || ', 地方: ' || my_record.REGION_NAME); END LOOP; -- カーソルをクローズ CLOSE my_cursor; END; /
とりあえず備忘録的なものなので、実用性は皆無です。
とりあえず出てきましたね。
超絶シンプルなPL/SQLなので、本来は BEGIN 部に条件分岐とか入れたらサンプルとしては良いかもしれませんが、基本の基本を思い出したい時用のページなのでこれくらいで。
関連記事
【SQL】テストデータ(都道府県コード・地方コード)
都道府県コードと地方コードのテストデータです。