4

Oracle 10gを使用していて、ある列に入力された値によって別の列がNULLかISNOTNULLかが決まるテーブルに制約を適用したいと思います。Column1には1または0のみを含めることができます。Column2はVARCHAR2(255)です。

私は次のことが機能することを知っています:

CONSTRAINT ck_1 CHECK ((col1=1 AND col2 IS NOT NULL) OR (col1=0 AND col2 IS NULL));

ただし、CASEを使用してこの制約を実行し、col2に属性NOT NULLを設定できるかどうか、またはCASEは値の定義にのみ使用できるかどうか疑問に思いました。つまり、このような作品のようなものである可能性があります。

CONSTRAINT ck_1 CHECK (CASE WHEN col1=1 THEN col2 IS NOT NULL ELSE col2 IS NULL END);
4

1 に答える 1

4

CASE式は値を返す必要があり、チェック制約はブール値であるため、結果を次のように比較する必要があります。

CONSTRAINT ck_1 CHECK (CASE WHEN col2 IS NOT NULL THEN 1 ELSE 0 END = col1);
于 2011-11-09T23:10:44.410 に答える