フェッチ・アクロス・コミット (fetch across commit) 処理

フェッチ・アクロス・コミットとは SELECT カーソルのループ内において、トランザクションを発生させて COMMIT 処理 しているもの。
ロールバックセグメントの設計(個数・サイズ)によっては
ORA-01555: スナップショットが古すぎます: ロールバック・セグメント番号string、名前"string"が小さすぎます。
のエラーが発生する。このエラーは、色々な現場でよく話題になる。(自動UNDO管理 Oracle 9i に移行が望ましい)

注意

フェッチ・アクロス・コミットでは、(COMMIT で ロックは解放されるため) SELECT 〜 FOR UPDATEカーソル にしたフェッチ・アクロス・コミットは使用できない。そのため WHERE CURRENT OF による更新もできない。SELECT 〜 FOR UPDATE を使用しても ORA-01002: フェッチ順序が無効です。エラーになる。

フェッチ・アクロス・コミット 使用例

 FOR vRec IN ( SELECT id, name FROM sample_table WHERE gender = 'MALE')
 LOOP
	DBMS_TRANSACTION.USE_ROLLBACK_SEGMENT('専用ロールバックセグメント');
	-- 手動管理
	UPDATE sample_table SET name = 'Mr.' || name WHERE id = vRec.id;
	COMMIT ;
 END LOOP;


関連事項

フェッチ・アクロス・コミットの関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)