3

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

我想添加一个检查约束,如果只有比率为 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

2 回答 2

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)
)
于 2012-08-30T17:31:51.627 回答
1

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

工作?

于 2012-08-30T14:11:02.877 回答