Oracle SQL - можно ли использовать CASE в проверочном ограничении для определения атрибутов данных? - PullRequest
4 голосов
/ 10 ноября 2011

Я использую Oracle 10g и хочу применить ограничение к таблице, в которой значение, введенное для одного столбца, определяет, является ли другой столбец NULL или NOT NULL.Столбец1 может содержать только 1 или 0;Столбец2 - это VARCHAR2 (255).

Я знаю, что работает следующее:

CONSTRAINT ck_1 CHECK ((col1=1 AND col2 IS NOT NULL) OR (col1=0 AND col2 IS NULL));

Однако мне было интересно, возможно ли использовать CASE для выполнения этого ограничения и установить атрибут NOTNULL на col2 или CASE можно использовать только для определения значений?то есть может что-то вроде этой работы:

CONSTRAINT ck_1 CHECK (CASE WHEN col1=1 THEN col2 IS NOT NULL ELSE col2 IS NULL END);

1 Ответ

4 голосов
/ 10 ноября 2011

Поскольку выражения CASE должны возвращать значение, а проверочные ограничения являются логическими, вам придется сравнивать результат с чем-то, например ::10000

CONSTRAINT ck_1 CHECK (CASE WHEN col2 IS NOT NULL THEN 1 ELSE 0 END = col1);
...