我有以下表結構唯一約束允許空的一列中的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
)
編輯:需要複合鍵約束 –
你不能。如果你添加一個基於這三個鍵的唯一約束條件,那麼你顯示的前兩條記錄顯然是相同的。我懷疑數據模型是不正確的,或者當RollNo爲空或者您需要代理鍵時,您不應輸入記錄。 – BriteSponge