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

ORACLE SQL リファレンス

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


 FARALL カウンター名 IN 最小値..最大値 SQL文

 コレクションなどに格納されている、データを最小値から最大値の範囲で処理します。


例1) 表「emp」を全件SELECTした項目「emp_id」をキーに、「salary」を2倍にしてUPDATEする。
declare
 
 type emp_type is table of emp.emp_id%type;
 v_emp_id emp_type;

begin

 -- 表「emp」から項目「emp_id」を全件取得し、v_emp_idに代入
 select emp_id bulk collect into v_emp_id from emp;

 -- 表「emp」をv_emp_idの配列サイズ数分UPDATEする。
 -- 項目「salary」を2倍にしてUPDATEする。
 forall i in 1 .. v_emp_id.count 
  update emp set salary = salary * 2 where emp_id = v_emp_id(i);

end;


例2) 表「emp」を全件SELECTし、表「emp_copy」にINSERTする。
declare

 type emp_type is table of emp%rowtype;
 emp_rec emp_type;

begin

 -- 表「emp」から全件取得し、emp_recに代入
 select * bulk collect into emp_rec from emp;

 -- 表「emp_copy」にemp_recの配列サイズ数分INSERTする。
 forall i in 1 .. emp_rec.count 
  insert into emp_copy values emp_rec(i);

end;

スポンサード リンク


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

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