我正在尝试通过添加与另一列组合的唯一约束来解决以下问题。
我的表:
Value Flag
1 Y
2 Y
3 Y
1 N
2 N
3 N
它们都不是主键。
对于给定的标志,我不能有重复的值,即,对于标志'Y',我不能有重复的值。标志'N'也是如此。
Value Flag
1 Y
2 Y
3 Y
3 Y <--- This should not be allowed
我正在尝试为此条件添加约束,如下所示。
ALTER TABLE Table_name
ADD CONSTRAINT Value_constraint
CHECK ((UPPER(Flag) = 'Y' AND UNIQUE(Value)) OR
(UPPER(Flag) = 'N' AND UNIQUE(Value)));
但是我收到了错误消息
SQL Error: ORA-00936: missing expression
00936. 00000 - "missing expression"
*Cause:
*Action:
有人可以帮忙吗?
答案 0 :(得分:1)
如果不允许组合,则添加唯一约束或索引:
ALTER TABLE Table_name
ADD CONSTRAINT Value_constraint UNIQUE (Value, Flag);
如果您始终希望标志为大写,那么也要为该效果添加约束:
ALTER TABLE Table_name
ADD CONSTRAINT CHK_Flag_Upper CHECK (Flag = UPPER(Flag));