2017-07-24 42 views
1

我有以下表結構唯一約束允許空的一列中的Oracle

tbl_exam (Year,ExamCode,RollNo) 

1)。表數據是:

(2017,1,NULL) 
(2017,1,NULL) 
(2017,1,1) 
(2017,1,2) 

允許上述值

2)。

(2017,1,1) 
(2017,1,1) **Not Allowed** 

如何添加唯一約束,允許空值RollNo列

編輯:需要複合鍵約束

解決: 多虧了大衛·阿爾德里奇

create unique index exam_uidx on tbl_exam 
(
Nvl2(RollNo, Year , null), 
Nvl2(RollNo, Exam_Code, null), 
RollNo 
) 
+0

編輯:需要複合鍵約束 –

+0

你不能。如果你添加一個基於這三個鍵的唯一約束條件,那麼你顯示的前兩條記錄顯然是相同的。我懷疑數據模型是不正確的,或者當RollNo爲空或者您需要代理鍵時,您不應輸入記錄。 – BriteSponge

回答

1

我希望你可以放置一個唯一約束做到這一點:

(
    Nvl2(RollNo, Year , null), 
    Nvl2(RollNo, ExamCode, null), 
    RollNo 
) 

未測試

+0

感謝David Aldridge –

+0

@ S.NisarAhmad,如果這回答了您的問題,請將其標記爲「正確」。 –