Oracle 12 行组合的唯一约束
Oracle 12 Unique constraint for row combination
我有 3 列:A, B, C
。
A
是 pkid,B
和 C
是 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 的实际值的字符串。
我有 3 列:A, B, C
。
A
是 pkid,B
和 C
是 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 的实际值的字符串。