2017-02-16 88 views
1

我有一個表status的Oracle SQL迫使一列是null,如果(不)符合條件

enter image description here

,我想每一個記錄的completionDate字段設置爲NULL,如果status.status字段的值是不是completed

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

因爲如果狀態不完全或不完全,不應該有一個完成日期。我該怎麼做?

+0

@GurV我們可以做這樣的事情了'DEFAULT'約束? –

回答

2

您可以創建一個表級約束,如果狀態不完整,只允許空值,當狀態完成時只允許空值。

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

如果你不想接受完成日期零點如果狀態是完全那就試試這個:

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