トランザクションのロールバック
トランザクションのロールバックでは変更は取り消されます。トランザクション全体をロールバックするか、指定したセーブポイントまでロールバックすることができます。
指定したセーブポイントまで現在のトランザクションをロールバックするには、TO SAVEPOINT句を使用するROLLBACK文を使用する必要があります。
現在のトランザクション全体をロールバックするには、TO SAVEPOINT句を指定せずにROLLBACK文を使用するか、または(SQL Developer環境で)「変更のロールバック」アイコンを使用します。
現在のトランザクション全体をロールバックすると、次の処理が実行されます。
-
トランザクションを終了します。
-
トランザクションのすべての変更を戻します。
-
すべてのセーブポイントを消去します。
-
トランザクションのロックを解除します。
現在のトランザクションの指定したセーブポイントまでのみのロールバック:
-
トランザクションを継続します。
-
指定したセーブポイント後の変更まで戻ります。
-
指定したセーブポイントの後に設定したセーブポイントのみを消去します(指定したセーブポイント自体は消去しません)。
-
指定したセーブポイント後に取得したすべての表ロックおよび行ロックを解除します。
指定したセーブポイント後にロックされた行にアクセスする必要がある別のトランザクションは、トランザクションがコミットまたはロールバックされるまで待機するよう継続させます。行を要求していないトランザクションは、行を要求し即時アクセスにできます。
SQL Developerでのロールバックの影響を確認するには、「リフレッシュ」アイコンをクリックする必要がある場合があります。
例3-7の結果、REGIONS表には「Middle East and Africa」というリージョンと「Africa」という地域があります。例3-8では、この問題を修正(単純なトランザクション)して変更を確認した後、トランザクションをロールバックし、ロールバックされたことを確認します。
例3-8 トランザクション全体のロールバック
トランザクション前:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
結果:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
トランザクション(表の変更)を実行します。
UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';
結果:
1 row updated.
変更を確認します。
SELECT * FROM REGIONS
ORDER BY REGION_ID;
結果:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East
5 Africa
5 rows selected.
トランザクションをロールバックします。
ROLLBACK;
結果:
Rollback complete.
ロールバックを確認します。
SELECT * FROM REGIONS
ORDER BY REGION_ID;
結果:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
関連項目: ROLLBACK文の詳細は、Oracle Database SQL言語リファレンスを参照してください。