PL / SQL检查约束:一列上的值取决于另一列

时间:2012-08-30 14:06:25

标签: oracle plsql

使用PL / SQL,我正在构建一个包含config的表,该表根据比率将样本分布为2个不同的集合。它有4列:sample_type,set_1,set_2,ratio(进入set_1的样本百分比)。例如,如果一行是('walk','left','right',50),则表示类型为'walk'的样本,其中50%为'left'而其余为'right'。

我想添加一个检查约束,如果只有比率为100,则确保set_2为null,即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不允许检查子查询。那么,是否有另一种方法为这种情况添加检查约束?

谢谢

2 个答案:

答案 0 :(得分:4)

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

我并不完全确定这是否是一项要求,但如果SET_2在100的情况下需要为null,那么你会想要这个:

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

答案 1 :(得分:1)

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

工作?