Oracle PL/SQL カーソルFORループ SELECT結果を変数に格納

スポンサーリンク
スポンサーリンク

SELECTした結果を変数に代入する方法 「カーソルFORループ」

PL/SQLでSELECTした結果を変数に代入してデータ処理を行うときは「カーソルFORループ」を使用します。

以前に紹介した「SELECT INTO文」と違うのは、複数行の場合でも検索結果が0件でも処理することができるところです。

「SELECT INTO文」については以前に記事を書いているのでよかったら参考にしてみてください。

Oracle PL/SQL 「SELECT INTO文」 SELECTした結果を変数に代入する
SELECTした結果を変数に代入する方法 「SELECT INTO文」 PL/SQLでSELECTした結果を変数に代入してデータ処理を行うときは「SELECT INTO文」を使用します。 「SELECT INTO文」 基本構文 「SELEC...

「カーソルFORループ」の基本構文

「カーソルFORループ」の基本構文は以下のように記述します。/p>

FOR <ループ索引名> IN <カーソル名> LOOP
    <実行したい処理を記述>
END LOOP;

「カーソルFORループ」の実行例

テスト用のテーブルとデータは以下を使用します。

CREATE TABLE animal1
(
    id       VARCHAR2(10)
    ,name    VARCHAR2(20)
    ,address VARCHAR2(20)
);

INSERT ALL
INTO animal1 VALUES('001', 'いるか', '海')
INTO animal1 VALUES('002', 'ぺんぎん', '空')
INTO animal1 VALUES('003', 'うさぎ', '空')
INTO animal1 VALUES('004', 'ふくろう', '空')
SELECT * FROM dual;

実行する「カーソルFORループ」のプログラムは以下を使用します。

DECLARE
    CURSOR animal_cur IS 
        SELECT id, name FROM animal1 WHERE address = '空';
BEGIN
    FOR animal_rec IN animal_cur LOOP
        DBMS_OUTPUT.PUT_LINE( 'id:' || animal_rec.id );
        DBMS_OUTPUT.PUT_LINE( 'name:' || animal_rec.name );
    END LOOP;
END;
/
SQL> CREATE TABLE animal1
  2  (
  3      id       VARCHAR2(10)
  4      ,name    VARCHAR2(20)
  5      ,address VARCHAR2(20)
  6  );

表が作成されました。

SQL>
SQL> INSERT ALL
  2  INTO animal1 VALUES('001', 'いるか', '海')
  3  INTO animal1 VALUES('002', 'ぺんぎん', '空')
  4  INTO animal1 VALUES('003', 'うさぎ', '空')
  5  INTO animal1 VALUES('004', 'ふくろう', '空')
  6  SELECT * FROM dual;

4行が作成されました。

以下が「カーソルFORループ」の実行結果です。

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2      CURSOR animal_cur IS
  3          SELECT id, name FROM animal1 WHERE address = '空';
  4  BEGIN
  5      FOR animal_rec IN animal_cur LOOP
  6          DBMS_OUTPUT.PUT_LINE( 'id:' || animal_rec.id );
  7          DBMS_OUTPUT.PUT_LINE( 'name:' || animal_rec.name );
  8      END LOOP;
  9  END;
 10  /
id:002
name:ぺんぎん
id:003
name:うさぎ
id:004
name:ふくろう

PL/SQLプロシージャが正常に完了しました。

複数行の検索結果を処理できていますね\(^o^)/

コメント

タイトルとURLをコピーしました