CHECK整合性制約(Integrity Constraint)は列または列の集合に定義され、データ行がユーザー定義の検査条件を満たすか、条件の評価結果がUnknownであることを要求します。DMLステートメントがCHECK整合性制約の検査結果をFalseにする場合、そのステートメントはロールバック(Rolled Back)され、エラーが報告されます。
以下の例は、CHECK制約の構文の主な特徴を示しています。
obclient> CREATE TABLE t1(c1 INT, c2 INT, CONSTRAINT t1_cst_c1_equals_c2 CHECK(c1 = c2));
Query OK, 0 rows affected
obclient> INSERT INTO t1 VALUES(1, 1);
Query OK, 1 row affected
obclient> INSERT INTO t1 VALUES(2, 3);
OBE-02290: check constraint violated
ユーザーは CHECK 制約を使用して検査条件(Check Condition)を定義し、特殊な整合性ルール(Integrity Rule)を実現できます。CHECK 制約の検査条件を定義する際の制限事項は以下の通りです:
検査条件は、挿入または更新されるデータ行内の値を評価するためのブール式(Boolean Expression)でなければなりません。
検査条件には、サブクエリ(Subquery)、シーケンス(Sequence)、ROWNUMなどの疑似列(Pseudo column)、およびSYSDATE()、UID()、USER()、USERENV()など、環境やシナリオによって計算結果が異なる可能性のあるシステム関数を含めることはできません。
同一の列は複数の CHECK 制約の条件定義で参照されることができます。つまり、ユーザーが一つの列に定義できる CHECK 制約の数に制限はありません。一つの列に複数の CHECK 制約を作成する場合、各制約の検査条件が互いに矛盾しないようにする必要があります。CHECK 制約の検査順序は不定であり、各 CHECK 制約が排他的(Mutually Exclusive)であるかどうかもチェックされません。