select * from a_table where com = 'test' は1000件ヒットするとします
これを update a_table set upd=sysdate where com = 'test' とすると1000件アップデートされるが
100件ごとにコミットしたい
DECLARE
CNT NUMBER := 0;
BEGIN
FOR rec IN (SELECT * FROM a_table WHERE com = 'test') LOOP
CNT := CNT + 1;
UPDATE a_table SET upd = SYSDATE WHERE id = rec.id;
IF MOD(CNT, 100) = 0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
END;
/
まずカウンター変数CNTを初期化
その後、a_tableテーブルからcom列がtestのレコードを1件ずつ取得して、取得したレコードのid列に該当する行を更新
その際、カウンター変数CNTをインクリメント
そして、カウンター変数CNTを100で割った余りが0であれば、コミット
最後に再度コミットを行ってトランザクションを確定