OracleでSELECT結果をコレクション型変数に格納する方法

Oracle(8i以降)でSELECT結果をコレクション型変数に格納したり、FOR IN LOOPで処理する方法についての備忘録。

プログラミング言語もそうですが、短期間に様々な言語やDBを扱っていると、時々???ってなります…。


対応

BULK COLLECT INTO構文を使用する。

DECLARE

  TYPE TestTblType IS TABLE OF TEST_TBL%ROWTYPE;

  v_testTbl TestTblType;

BEGIN

  SELECT * BULK COLLECT INTO v_testTbl FROM TEST_TBL;

  FOR i IN 1 .. v_testTbl.COUNT LOOP

    DBMS_OUTPUT.PUT_LINE('Row:' || v_testTbl(i).column_name);

  END LOOP;

END;

上記と同等の処理をカーソルを用いて行うと以下の通り。

DECLARE

  CURSOR test_tbl_cursor IS
    SELECT * FROM TEST_TBL;

  v_row TEST_TBL%ROWTYPE;

BEGIN

  OPEN test_tbl_cursor;

  LOOP

    FETCH test_tbl_cursor INTO v_row;
    EXIT WHEN test_tbl_cursor%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('Row:' || v_row.column_name);

  END LOOP;

  CLOSE test_tbl_cursor;

END;


参考ウェブサイトなど

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする