SQL-92/99 Oracle Db2 SQL Server MySQL PostgreSQL Access

Oracle/ MySQL/

SAVEPOINT セーブポイント名


Db2/

SAVEPOINT セーブポイント名 ON ROLLBACK RETAIN CURSORS

SAVEPOINTはトランザクション処理中のロールバックポイントを作成するときに使用します。


Oracle, MySQLでは複数のセーブポイントを作成できますが、Db2では複数のセーブポイントを作成することはできません。


関連キーワード





SQL実行例の説明(1)

・T1_SAMPLE表のID100102に一致するデータのL_NAME山田に更新するトランザクション処理を開始します。

・次に、SAVEPOINTを使用してロールバックポイントを作成します。

・その後、T1_SAMPLE表にデータを挿入するトランザクション処理を開始します。


UPDATE T1_SAMPLE SET L_NAME = '山田' WHERE ID = '100102';

-- Oracle/ MySQL/
SAVEPOINT SP_UPD1;

-- Db2/
SAVEPOINT SP_UPD1 ON ROLLBACK RETAIN CURSORS;

INSERT INTO T1_SAMPLE VALUES ('200101', '小林', '健二', '1');


SQL実行の結果(1-1)

T1_SAMPLE表には5件のデータが格納されています。(左)

データを更新したトランザクション処理後のセーブポイント(SP_UPD1)へロールバックしてからトランザクション処理を確定します。(右)

このときデータを挿入したトランザクション処理はロールバック(トランザクション処理が取り消し)されているためT1_SAMPLE表には存在しません。


ROLLBACK TO SAVEPOINT SP_UPD1;

COMMIT;

SELECT * FROM T1_SAMPLE;

IDL_NAMEF_NAMESEX
100101山田晴男1
100102佐藤2
100103鈴木二郎1
100104田中栄吉1
100105木村1
SQL Result
IDL_NAMEF_NAMESEX
100101山田晴男1
100102山田2
100103鈴木二郎1
100104田中栄吉1
100105木村1