ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
複数レコードをまとめて取得する(バルク処理:FETCH)
スポンサード リンク


 FETCH カーソル名 INTO COLLECT INTO コレクション変数 [ LIMIT 一括処理件数 ]

 表から取得した複数レコードの項目を、まとめてコレクションにセットする。

 LIMITオプションで、一回に処理する件数を指定することもできる。
 例えば、「LIMIT 100」と指定した場合、一回に100件処理することになる。


例1) 表「emp」からSELECTした項目をコレクション変数「emp_rec」に代入する。
declar

 -- 表「emp」のコレクション型「emp_type」定義
 type emp_type is table of emp%rowtype;
 -- コレクション型「emp_type」の配列定義
 emp_rec emp_type;
 -- カーソル定義
 cursor emp_rows is select * from emp; 

begin

 open emp_rows;
 -- 表「emp」から取得した項目を、配列「emp_rec」に代入する。
 fetch emp_rows bulk collect into emp_rec;
 for i in 1 .. emp_rec.count loop
  -- 全レコードの項目「name」を表示する。
  dbms_output.put_line(emp_rec(i).name);
 end loop;

 close emp_rows;

end;
 ※レコード型(%ROWTYPE)は9i以降で使用可能


例2) 表「emp」からSELECTした項目をコレクション変数「emp_rec」に代入する。LIMITオプション指定
declare

 -- 表「emp」のコレクション型「emp_type」定義
 type emp_type is table of emp%rowtype;
 -- コレクション型「emp_type」の配列定義
 emp_rec emp_type;
 -- カーソル定義
 cursor emp_rows is select * from emp; 

begin

 open emp_rows;
 loop
 -- 表「emp」から取得した50件を、配列「emp_rec」に代入する。
  fetch emp_rows bulk collect into emp_rec limit 50;
  for i in 1 .. emp_rec.count loop
  -- 全レコードの項目「name」を表示する。
   dbms_output.put_line(emp_rec(i).name);
  end loop;
  exit when emp_rows%notfound;
 end loop;
 close emp_rows;

end;
 ※レコード型(%ROWTYPE)は9i以降で使用可能

スポンサード リンク


データベースアクセスの高速化について
複数レコードをまとめて取得する(SELECT〜INTO)
複数レコードをまとめて取得する(FETCH)
複数レコードをまとめて更新する(FORALL)

PL/SQL へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ