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);