2017-09-13 10 views
0

私は3列:A, B, Cを持っています。 Aはpkid、BおよびCはVarcharsです。私はすでにそのような制約を書きました: CONSTRAINT UNIQUE_DATA1 UNIQUE(B, C)。これは、値 "x"と "y"を2回挿入することを防ぎますが、 "x"と "y"の値がすでに存在する場合は、 "y"と "x"の挿入も防止します。 この制約を入れる方法はありますか?Oracle 12行の組み合わせの一意の制約

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

両方の値がnullになることはありません場合にのみ動作します:あなたはファンクション索引を作成することができます

答えて

1

。もし彼らがあなたのような何かをすることができます:

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

ここで '〜'は決してbまたはcの本当の値ではありません知っている文字列です。

+0

これは決してヌルになることはできません。チャームのように機能します。ありがとうございました! –

関連する問題