2017-02-16 20 views
1

У меня есть таблица status:Oracle SQL заставить столбец быть пустыми, если (не) встречей условия

enter image description here

и я хочу completionDate поля каждой записи, чтобы быть пустым, если значение 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 
     ) 
    )