ORACLE:如何将UNIQUE Con​​straint与其他列结合起来?

时间:2015-10-12 00:41:08

标签: sql oracle constraints unique-constraint

我正在尝试通过添加与另一列组合的唯一约束来解决以下问题。

我的表:

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:

有人可以帮忙吗?

1 个答案:

答案 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));