0
我有3列:A, B, C
。 A
是pkid,B
和C
是Varchars。我已經寫了這樣一個約束: CONSTRAINT UNIQUE_DATA1 UNIQUE(B, C)
。這可以防止插入值「x」和「y」兩次,但是如果「x」和「y」值已經存在,我也想阻止插入「y」和「x」。 有沒有辦法把這個約束?Oracle 12行組合的唯一約束
我有3列:A, B, C
。 A
是pkid,B
和C
是Varchars。我已經寫了這樣一個約束: CONSTRAINT UNIQUE_DATA1 UNIQUE(B, C)
。這可以防止插入值「x」和「y」兩次,但是如果「x」和「y」值已經存在,我也想阻止插入「y」和「x」。 有沒有辦法把這個約束?Oracle 12行組合的唯一約束
您可以創建一個基於函數的索引:
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的真實值。
他們永遠不能爲空,就像一個魅力!謝謝! –