2012-08-30 71 views
3

使用PL/SQL,我构建了一个包含配置的表格,该表格根据比率定义了样本分布到两个不同的集合中。它有4列:sample_type,set_1,set_2,ratio(样本去set_1的百分比)。例如,如果一行是('走','左','右',50),这意味着对于类型为“走路”的样本,其中50%是“离开”,而其余的走向“正确”。PL/SQL检查约束:一列的值取决于另一列

我想添加一个检查约束条件,它确保只有比例为100时set_2为空,即100%的样本转到set_1。我尝试这样的:

ALTER TABLE CONFIG 
ADD CONSTRAINT CHK 
CHECK (
    NOT EXISTS (SELECT 1 FROM CONFIG WHERE SET_2 IS NULL AND RATIO <> 0) 
) 

但是,Oracle不允许检查子查询。那么,是否有另一种方法为这种情况添加检查约束?

谢谢

回答

4
ALTER TABLE CONFIG 
ADD CONSTRAINT CHK 
CHECK (
    (RATIO = 100) OR (SET_2 IS NOT NULL AND RATIO != 100) 
) 

,我不完全确定,如果它是一个必要条件,但如果终端SET_2需要在100的情况下空,那么你会希望这样的:

ALTER TABLE CONFIG 
ADD CONSTRAINT CHK 
CHECK (
    (SET_2 IS NULL AND RATIO = 100) OR (SET_2 IS NOT NULL AND RATIO != 100) 
) 
1

ALTER TABLE CONFIG 
ADD CONSTRAINT CHK 
CHECK (
    SET_2 IS NULL AND RATIO <> 0 
) 

工作?

+0

这将迫使终端SET_2到为零并且比率始终为非零。我需要一个检查,如果只有比率为100,那么允许set_2为空,即当比率不为100时,set_2必须不为空 –

+0

ALTER TABLE CONFIG ADD CONSTRAINT CHECK_SET_2 CHECK((SET_2 IS NULL AND RATIO = 100)OR(SET_2 IS NOT NULL AND RATIO <> 100))'。 –