用途
SET
CONSTRAINTS
文を使用すると、遅延可能な制約の検証を、各DML文の実行後に行うか(IMMEDIATE
)、トランザクションのコミット時に行うか(DEFERRED
)をトランザクションごとに指定できます。この文を使用して、制約名のリストまたはALL
制約のモードを設定できます。
SET
CONSTRAINTS
モードは、トランザクションの存続期間中、または別のSET
CONSTRAINTS
文によってモードがリセットされるまで継続します。
注意: ALTER SESSION 文でSET CONSTRAINTS 句を使用して、すべての遅延可能制約を設定することもできます。これは、現在のセッションの各トランザクションの開始時にSET CONSTRAINTS 文を発行することと同等です。 |
トリガー定義の内部でこの文を指定することはできません。
SET
CONSTRAINTS
は、分散型の文にすることができます。処理中のトランザクションを持つ既存のデータベース・リンクにはSET
CONSTRAINTS
ALL
文の発行時にその発行が通知され、新しいリンクにはトランザクションの開始直後にその発行が通知されます。
セマンティクス
constraint
1つ以上の整合性制約の名前を指定します。
ALL
を指定すると、このトランザクションに対するすべての遅延可能な制約を設定できます。
IMMEDIATE
を指定すると、指定された制約が、各制約DML文の実行時に即時にチェックされます。Oracle Databaseでは、チェック済のすべての制約に一貫性があり、他のSET
CONSTRAINTS
文が発行されていない場合、トランザクションで以前に遅延された制約が最初にチェックされ、その後すぐにそのトランザクションの他の文の制約チェックが継続してチェックされます。制約のチェックに失敗した場合は、エラーが通知されます。その時点で、COMMIT
文を実行すると、トランザクション全体が元に戻されます。
COMMIT
を正常に実行できるかどうかをチェックする方法としてトランザクションの終了直後に制約を行います。制約をトランザクション内の最後の文としてIMMEDIATE
に設定することで、予期しないロールバックを回避できます。いずれかの制約のチェックに失敗した場合は、トランザクションをコミットする前にエラーを解決できます。
DEFERRED
を指定すると、遅延可能な制約によって指定された条件が、トランザクションのコミット時に検証されます。
注意: SET CONSTRAINTS ALL IMMEDIATE 文を発行することによって、遅延可能な制約をコミットする前に、それらの制約が完全に適用されたかどうかを検証できます。 |