2011-11-09 5 views
4

私はOracle 10gを使用しています.1つの列に入力された値によって、別の列がNULLであるかIS NOT NULLであるかを決定するテーブルに制約を適用したいとします。 Column1に含めることができるのは1または0のみです。 Column2はVARCHAR2(255)です。この制約を実行するためにCASEを使用するとcol2にNOT NULL属性を設定、またはのみに使用する場合できることが可能である場合はOracle SQL - データ属性を判別するためにチェック制約でCASEを使用できますか?

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

、私が思っていた:

は、私は、次の作品があることを知っています値を定義しますか? CASE式が値を返す、と制約を確認する必要がありますので例えば、ブールあり、あなたが何かで結果を比較する必要があります

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

答えて

4

CONSTRAINT ck_1 CHECK (CASE WHEN col2 IS NOT NULL THEN 1 ELSE 0 END = col1); 
:つまり、この作品のようなものができました