文を使用する。
SET CONSTRAINTS ALL IMMEDIATE を実行することでロールバックされず、例外のみが発生する。
COMMIT 前に例外処理を設けることで トランザクション全体がロールバックされるのを防ぐことが可能になる。
遅延制約の例 (表定義は上のものを使用)
SQL> SET CONSTRAINT ALL DEFERRED ;
制約が設定されました。
SQL> INSERT INTO UNIQUE_TEST VALUES(1);
SQL> INSERT INTO UNIQUE_TEST VALUES(1);
SQL> SET CONSTRAINT ALL IMMEDIATE ;
行1でエラーが発生しました。:
ORA-00001: 一意制約(RIVUS.UNIQUE_TEST_PK)に反しています
SQL> DELETE FROM UNIQUE_TEST WHERE ROWNUM = 1;
1行が削除されました。
SQL> SET CONSTRAINT ALL IMMEDIATE ;
制約が設定されました。
SQL> COMMIT;
コミットが完了しました。
SQL> SELECT * FROM UNIQUE_TEST;
ID
----------
1