SAVEPOINT

SAVEPOINT ステートメントは、作業単位内にセーブポイントを設定します。 セーブポイントは作業単位内の特定時点を表すもので、リレーショナル・ データベースに対する変更をその時点までロールバックすることができます。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。

権限

権限は不要です。

構文

構文図を読む構文図をスキップする
>>-SAVEPOINT--savepoint-name--+--------+------------------------>
                              '-UNIQUE-'   

                                                            (1)     
                               .-ON ROLLBACK RETAIN LOCKS-------.   
>--ON ROLLBACK RETAIN CURSORS--+--------------------------------+-><

注:
  1. ROLLBACK のオプションは、どのような順序で指定しても構いません。

説明

savepoint-name
新しいセーブポイント を指定します。「SYS」で始まる savepoint-name は使用できません。
UNIQUE
アプリケーション・プログラムが、この作業単位内でこの セーブポイント名を再使用できないことを指定します。 この作業単位内に、既にセーブポイント名 と同じ名前が存在 している場合は、エラーが起こります。

UNIQUE を省略した場合は、アプリケーションが作業単位内でこの セーブポイント名を再使用できることを示します。 セーブポイント名 がこの作業単位内の既存のセーブポイントのどれか と同じであっても、その既存のセーブポイントの作成時に UNIQUE オプション が指定されていなければ、その既存のセーブポイントは破棄され、新しいセーブポイントが作成されます。 セーブポイントを破棄して、その名前を他のセーブポイントに再使用すること は、セーブポイントを解放することとは異なります。 1 つのセーブポイント名を再使用した場合、破棄されるセーブポイントは 1 つだけです。 しかし、RELEASE SAVEPOINT ステートメントを使用してセーブポイント の 1 つを解放すると、そのセーブポイント以降に設定されているすべての セーブポイントが解放されます。

ON ROLLBACK RETAIN CURSORS
このセーブポイントへのロールバックが行われたときに、 このセーブポイントの設定後にオープンされたカーソルをクローズしないことを指定します。
  • SAVEPOINT ステートメントの有効範囲内の表またはビューに対して SQL スキーマ・ステートメントが実行される場合、その表またはビューを参照するカーソルはすべてクローズされます。 ROLLBACK TO SAVEPOINT の後でこのようなカーソルを使用しようとすると、エラーが起こります。
  • その他の場合は、カーソルは ROLLBACK TO SAVEPOINT の影響を受け ません (オープンされ、位置付けされたままの状態を維持します)。
上記のカーソルは、セーブポイントへのロールバックの後もオープン状態 のままになっていますが、使用不能になることもあります。 例えば、セーブポイントへのロールバックが原因で、カーソルが位置付け されている行の挿入がロールバックされることになった場合、カーソル を使用してその行を更新または削除しようとすると、エラーが起こります。
ON ROLLBACK RETAIN LOCKS
このセーブポイントへのロールバックが行われたときに、セーブポイント の設定後に獲得されたロックをどれも解放しないことを指定します。

セーブポイントの持続性: セーブポイント S は次の場合に破棄されます。
  • COMMIT ステートメントまたは ROLLBACK (TO SAVEPOINT 節を指定しない) ステートメントを実行する場合。
  • ROLLBACK TO SAVEPOINT ステートメントを、セーブポイント S を指定して、または作業単位で S よりも前に設定されたセーブポイントを指定して実行する場合。
  • RELEASE SAVEPOINT ステートメントを、セーブポイント S を指定して、または作業単位で S よりも前に設定されたセーブポイントを指定して実行する場合。
  • SAVEPOINT ステートメントで、UNIQUE キーワードを指定して作成しなかった既存のセーブポイントと同じ名前を指定する場合。

INSERT に対する影響: アプリケーションでは、挿入操作がバッファーに入れられることがあります。 SAVEPOINT、ROLLBACK、または RELEASE TO SAVEPOINT ステートメントを 実行すると、バッファーはフラッシュされます。

SAVEPOINT の制約事項: 対象の活動化グループについてコミットメント制御が活動状態にない場合は、SAVEPOINT ステートメントは使用できません。どのコミットメント定義が使用されているかを判別する方法については、COMMIT ステートメントの を参照してください。

ある作業単位内の 3 箇所にセーブポイントを設定したいとします。 第 1 のセーブポイントには A と命名し、このセーブポイント名は再使用できるようにします。 第 2 のセーブポイントには B と命名し、この名前は再使用できないようにします。 第 3 のセーブポイントが設定可能な状態になった時点ではセーブポイント A は 不要になるので、第 3 のセーブポイントの名前として A を再使用します。

   SAVEPOINT A ON ROLLBACK RETAIN CURSORS;
   .
   .
   .
   SAVEPOINT B UNIQUE ON ROLLBACK RETAIN CURSORS;
   .
   .
   .
   SAVEPOINT A ON ROLLBACK RETAIN CURSORS;