2017-07-24 1 views
1

Je le tableau suivant Structureunique contrainte autorisant les valeurs NULL pour une colonne dans Oracle

tbl_exam (Year,ExamCode,RollNo) 

1). Les données dans le tableau est la suivante:

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

Autoriser les valeurs ci-dessus

2).

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

Comment ajouter une contrainte d'unicité qui permet valeur NULL RollNo colonne

Edit: Need Composite contrainte de clé

Résolu: Merci à David Aldridge

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

Edit: Need Composite contrainte de clé –

+0

Vous ne pouvez pas. Si vous ajoutez une contrainte unique basée sur ces trois clés, les deux premiers enregistrements que vous affichez seront clairement identiques. Je soupçonne que le modèle de données est incorrect et que vous ne devriez pas entrer un enregistrement lorsque le RollNo est nul ou que vous avez besoin d'une clé de substitution. – BriteSponge

Répondre

1

Je pense que vous pouvez le faire en plaçant une contrainte unique sur:

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

Non testé

+0

Merci David Aldridge –

+0

@ S.NisarAhmad, si cela a répondu à votre question, s'il vous plaît marquer comme correct. –