Нет такой вещи, как условная обнуляемость.Но вы можете проверить 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
.