2017-02-16 60 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 
     ) 
    ) 
相关问题