ここでは、ROLLBACK TO SAVEPOINTの構文、パラメーター、および例を紹介します。
説明
セーブポイントが確立された後に実行されたすべてのコマンドをロールバックします。 セーブポイントは有効なままであり、必要に応じて後で再びロールバックできます。
ROLLBACK TO SAVEPOINTは、名前付きセーブポイントの後に確立されたすべてのセーブポイントを暗黙的に破棄します。
概要
ROLLBACK [ WORK | TRANSACTION] [SAVEPOINT ] savepoint_nameパラメーター
savepoint_name: ロールバックするsavepoint。
注
RELEASE SAVEPOINTを使用して、確立後に実行されたコマンドの影響を破棄せずにセーブポイントを破棄します。
設定されていないセーブポイント名の指定はエラーです。
カーソルは、セーブポイントに関して幾分非トランザクション挙動を有する。 セーブポイント内で開いているカーソルは、セーブポイントがロールバックされると閉じられます。 以前に開いたカーソルが、後にロールバックされるセーブポイント内のFETCHまたはMOVEコマンドの影響を受けた場合、カーソルはFETCHが指していた位置のままになります (つまり、FETCHによるカーソルの動きはロールバックされません) 。 カーソルを閉じることも、ロールバックによって元に戻されません。 ただし、カーソルのクエリによって引き起こされるその他の副作用 (クエリによって呼び出される揮発性関数の副作用など) は、後でロールバックされるセーブポイント中に発生した場合、ロールバックされん。 実行によってトランザクションが中止されるカーソルはcannot-execute状態になり、ROLLBACK to SAVEPOINTを使用してトランザクションを復元できますが、カーソルは使用できなくなります。
例
my_savepointが確立された後に実行されたコマンドの効果を元に戻すには:
ROLLBACK TO SAVEPOINT my_savepoint;カーソル位置はsavepointロールバックの影響を受けません:
BEGIN;
SELECT 1 UNION SELECT 2のDECLARE fooカーソル。
SAVEPOINT foo;
fooからのFETCH 1;
? コラム?
----------
1
SAVEPOINT fooへのロールバック;
fooからのFETCH 1;
? コラム?
----------
2
コミット;