Oracle 12 行组合的唯一约束

Oracle 12 Unique constraint for row combination

我有 3 列:A, B, CA 是 pkid,BC 是 Varchars。我已经写了这样的约束: CONSTRAINT UNIQUE_DATA1 UNIQUE(B, C)。这可以防止插入值 "x" 和 "y" 两次,但如果 "x" 和 "y" 值已经存在。 有没有办法加入这个约束?

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

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 的实际值的字符串。