通常、制約はINSERT、UPDATE、DELETE文など実行されたタイミングでチェックが行なわれますが、遅延制約を設定することで、このチェックのタイミングをCOMMIT時に遅らせることが出来ます。

SQL> CREATE TABLE TEST (COL1 NUMBER CONSTRAINT TEST_PK PRIMARY KEY DEFERRABLE INITIALLY IMMEDIATE);

表が作成されました。

表作成時にDEFERRABLE を設定することで、後続のトランザクションで遅延可能な設定が行なえます。
また、INITIALLY~  以降の文で初期値を設定できます。
IMMEDIATEの場合、SQL文の実行後、すぐにチェックを行ないます。
DEFERREDの場合、COMMITの実行後にチェックを行ないます。

INSERT INTO TEST VALUES (1);

SQL> INSERT INTO TEST VALUES (1);

1行が作成されました。

SQL> INSERT INTO TEST VALUES ();
INSERT INTO TEST VALUES (1)
*
行1でエラーが発生しました。:
ORA-00001: 一意制約(SYS.TEST_PK)に反しています 

また、SET CONSTRAINT句を利用することで、トランザクションごとの設定を指定できます。
遅延制約の場合はDEFERREDを指定します。

SQL> SET CONSTRAINTS SYS.TEST_PK DEFERRED;

制約が設定されました。

SQL> INSERT INTO TEST VALUES (2);

1行が作成されました。

SQL> INSERT INTO TEST VALUES (2);

1行が作成されました。

SQL> COMMIT;
COMMIT
*
ORA-02091: トランザクションがロールバックされました。 ORA-00001:
一意制約(SYS.TEST_PK)に反しています:

COMMIT時のチェックにエラーがあった場合、トランザクションはロールバックされます。

続いて、遅延制約で表を作ってみます。

SQL> CREATE TABLE TEST (COL1 NUMBER CONSTRAINT TEST_PK PRIMARY KEY DEFERRABLE INITIALLY DEFERRED);

表が作成されました。

遅延制約の場合、表作成時にDEFERRABLE INITIALLY DEFERREDを指定します。

SQL> INSERT INTO TEST VALUES (2);

1行が作成されました。

SQL> INSERT INTO TEST VALUES (2);

1行が作成されました。

SQL> COMMIT;
COMMIT
*
行1でエラーが発生しました。:
ORA-02091: トランザクションがロールバックされました。 ORA-00001:
一意制約(SYS.TEST_PK)に反しています

COMMIT時に制約のチェックを行なわれました。
チェックをSQL文の実行後に行わせるように変更する場合はSET CONSTRAINT句でIMMEDIATEを指定します。

SQL> SET CONSTRAINTS SYS.TEST_PK IMMEDIATE;

制約が設定されました。

SQL> INSERT INTO TEST VALUES (2);

1行が作成されました。

SQL> INSERT INTO TEST VALUES (2);
INSERT INTO TEST VALUES (2)
*
行1でエラーが発生しました。:
ORA-00001: 一意制約(SYS.TEST_PK)に反しています 

制約のチェックがSQL文の実行後に行なわれました。