SQL 解説書
ROLLBACK ステートメントは、
作業単位または保管点においてデータベースに加えられた変更を撤回するために使用します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むか、
あるいは動的 SQL ステートメントの使用によって発行することができます。
このステートメントは、動的に準備可能な実行可能ステートメントです。
許可
権限は不要です。
構文
.-WORK--.
>>-ROLLBACK----+-------+---------------------------------------->
>-----+------------------------------------+-------------------><
'-TO SAVEPOINT--+-----------------+--'
'-savepoint-name--'
説明
ROLLBACK ステートメントが実行される作業単位は終了し、
新しい作業単位が開始されます。
その作業単位の過程でデータベースに対して行われた変更はすべて取り消されます。
ただし、以下のステートメントはトランザクションによって制御されず、
これらのステートメントによって行われた変更は ROLLBACK ステートメントの発行とは独立しています。
- SET CONNECTION,
- SET CURRENT DEGREE,
- SET CURRENT DEFAULT TRANSFORM GROUP,
- SET CURRENT EXPLAIN MODE,
- SET CURRENT EXPLAIN SNAPSHOT,
- SET CURRENT PACKAGESET,
- SET CURRENT QUERY OPTIMIZATION,
- SET CURRENT REFRESH AGE,
- SET EVENT MONITOR STATE,
- SET PASSTHRU,
- SET PATH,
- SET SCHEMA,
- SET SERVER OPTION.
- TO SAVEPOINT
- 部分的なロールバック (ROLLBACK TO SAVEPOINT) を実行することを指定します。
活動中の保管点がない場合は、SQL エラーが戻されます (SQLSTATE 3B502)。
保管点は、ROLLBACK が正常に完了した後もそのまま存続します。
savepoint-name が指定されない場合は、
最後に設定された保管点までロールバックが実行されます。
この文節を省略して ROLLBACK WORK ステートメントを実行すると、
トランザクション全体がロールバックされます。
また、トランザクション内の保管点は解放されます。
- savepoint-name
- どの保管点 (savepoint-name) までロールバックするかを指定します。
savepoint-name によって定義された保管点は、
ROLLBACK が正常に完了した後もそのまま存続します。
指定された名前の保管点が存在しない場合は、エラーが戻されます (SQLSTATE 3B001)。
保管点が設定された後に加えられたデータおよびスキーマの変更が取り消されます。
注
- ROLLBACK が実行された作業単位では、保持されていたロックがすべて解放されます。
オープン・カーソルはすべてクローズされます。
LOB ロケーターはすべて解放されます。
- ROLLBACK ステートメントの実行により、
特殊レジスターの値を変更する SET ステートメントまたは RELEASE ステートメントは影響を受けません。
- プログラムが異常終了した場合は、
暗黙的にその作業単位がロールバックされます。
- ステートメントのキャッシュは、ロールバック操作の影響を受けます。
詳細については、注 を参照してください。
- アトミック複合ステートメントやトリガーのようなアトミック実行のコンテキストでは、
保管点を使用できません。
- ROLLBACK TO SAVEPOINT がカーソルに与える影響は、
保管点に含まれているステートメントによって異なります。
- 保管点に DDL が含まれており、この DDL にカーソルが従属している場合、
カーソルは無効としてマークされます。
これらのカーソルを使おうとすると、エラーが戻されます (SQLSTATE 57007)。
- それ以外の場合は、次のとおりです。
- 保管点で参照されているカーソルは、
オープンされたままになり、結果表の次の論理行の前に置かれます。
104
- 保管点で参照されていないカーソルは、
ROLLBACK TO SAVEPOINT の影響を受けません (元の位置でオープンされたままになります)。
- 動的に準備されたステートメントの名前は依然として有効ですが、
保管点内でロールバックされた DDL 操作の結果として、
ステートメントが暗黙的に再び準備されることがあります。
- ROLLBACK TO SAVEPOINT 操作が行われると、
保管点の中で指定されていた宣言された一時表はすべて除去されます。
宣言された一時表を保管点の中で変更していた場合は、すべての行が表から削除されます。
- すべてのロックは、
ROLLBACK TO SAVEPOINT ステートメントの後にも保持されます。
- すべての LOB ロケーターは、
ROLLBACK TO SAVEPOINT 操作の後にも保持されます。
例
最後のコミット・ポイントまたはロールバック以後に行われた変更を削除します。
ROLLBACK WORK
脚注:
- 104
-
位置による UPDATE ステートメントまたは DELETE ステートメントが出される前に、
FETCH を実行する必要があります。
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]