2017-02-16 1 views
1

J'ai une table status:Oracle SQL forcer une colonne à NULL si (non) répondant une condition

enter image description here

et je veux le champ completionDate de chaque document pour être NULL si la valeur du champ status.status n'est pas completed

alter table status 
     add constraint ck_completion 
       check ( 
         -- status.completiondate's value should be null 
        -- if (Lower(status.status) != 'complete') 
       ); 

Parce que si l'état n'est pas complet ou incomplet, il ne devrait pas être une date d'achèvement. Comment puis-je le faire?

+0

@GurV pouvons-nous faire quelque chose comme une contrainte 'default'? –

Répondre

2

Vous pouvez créer une contrainte de niveau table qui n'autorise que les valeurs nulles si l'état n'est pas complet et toute valeur lorsque l'état est terminé.

alter table status add constraint ck_completion check (
    lower(status) = 'complete' 
    or completiondate is null 
    ) 

Si vous ne voulez pas accepter des valeurs NULL à la date d'achèvement si l'état est complet puis essayez ceci:

alter table status add constraint ck_completion check (
    (
     lower(status) <> 'complete' 
     and completiondate is null 
     ) 
    or (
     lower(status) = 'complete' 
     and completiondate is not null 
     ) 
    )