Oracle 12行组合的唯一约束

时间:2017-09-13 11:22:13

标签: oracle unique-constraint

我有3列:A, B, CA是pkid,BC是变体。我已经写了这样一个约束: CONSTRAINT UNIQUE_DATA1 UNIQUE(B, C)。这可以防止两次插入值“x”和“y”,但如果“x”和“y”值已经存在,我还想阻止插入“y”和“x”。 有没有办法把这个约束放进去?

1 个答案:

答案 0 :(得分:1)

您可以创建基于函数的索引:

create unique index unique_data2 (least(b,c), greatest(b,c));

仅当两个值都不能为空时才会起作用。如果他们能做到这样的事情:

create unique index unique_data2 
  ( least(nvl(b,'~),nvl(c,'~'))
  , greatest(nvl(b,'~),nvl(c,'~'))
  );

其中'〜'是一个你知道永远不会是b或c的实际值的字符串。