2017-09-13 129 views
0

我有3列:A, B, CA是pkid,BC是Varchars。我已經寫了這樣一個約束: CONSTRAINT UNIQUE_DATA1 UNIQUE(B, C)。這可以防止插入值「x」和「y」兩次,但是如果「x」和「y」值已經存在,我也想阻止插入「y」和「x」。 有沒有辦法把這個約束?Oracle 12行組合的唯一約束

回答

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的真實值。

+0

他們永遠不能爲空,就像一個魅力!謝謝! –