установка столбца не равным нулю в зависимости от условия оракула - PullRequest
0 голосов
/ 25 февраля 2019

у меня есть таблица со столбцом A и столбцом B. Я хотел бы сделать столбец A пустым, если значение столбца B равно 123, и сделать его NOT NULL, если столбец B является чем-то еще.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Нет такой вещи, как условная обнуляемость.Но вы можете проверить NULL значение:

create table t (
    . . . ,
    a int,
    b varchar2(255),
    constraint chk_t_a check ( (b <> '123' and a is not null) or (b <> '123'))
);

Если b может принимать значения NULL, то вам также необходимо это учитывать.

Примечание: Если вы хотите, чтобы a всегда было NULL только тогда, когда b = '123', тогда используйте:

create table t (
    . . . ,
    a int,
    b varchar2(255),
    constraint chk_t_a check ( not (b = '123' and a is not null) )
);

check ограничения проходят, даже когда результирующее значение равно NULL- в отличие от WHERE и CASE WHEN логики.Таким образом, это работает, даже если b равно NULL.

0 голосов
/ 25 февраля 2019

Вы можете использовать case выражение:

select (case when colb <> 123 then cola end) as cola, t.colb
from table t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...