Создание ограничения для нескольких столбцов на основе значения другого столбца - PullRequest
4 голосов
/ 29 марта 2012

Я пытаюсь создать проверку для нескольких столбцов в моей базе данных, которая заставляет их быть нулевыми, если значение другого столбца - да. Я пробовал что-то вроде

ALTER TABLE TABLE1
ALTER Column1
CHECK (Column2 = 'y')

Но, похоже, это не работает. Есть ли способ сделать это так, или есть лучший способ обойти эту проблему? Любая помощь в правильном направлении была бы великолепна.

Ответы [ 2 ]

5 голосов
/ 29 марта 2012

Если вы хотите, чтобы col1 было нулевым, если col2 не равно 'y', вы можете записать ограничение CHECK как:

col2 = 'y' OR col1 IS NULL

Если вы хотите дополнительно указать, что col1 должно иметь значение, когда col2 равно 'y', вы можете записать ограничение как:

(col2 = 'y' AND col1 IS NOT NULL) OR (col2 != 'y' AND col1 IS NULL)

Вы должны написать это как ограничение таблицы, кстати. Я не думаю, что ограничение столбца может ссылаться на другие столбцы. (Но в любом случае ограничение столбца - это просто еще один способ записи ограничения таблицы, поэтому вы ничего не потеряете, записав вместо этого ограничения таблицы.)

0 голосов
/ 29 марта 2012

так много вариантов есть ...

но обычно используется проверка для проверки строки .. и если условие не удовлетворяет, то эта строка будет игнорироваться базой данных ...

Вы можете попробовать триггер ...

CREATE OR REPLACE TRIGGER trg_table1_col2
   before INSERT ON table1
   DECLARE
     duplicate_info EXCEPTION;
   BEGIN
     if :new.coloumn2 <>'y'
then :new.column1 := null;
end if;     
   END trg_table1_col2; 

возможно, есть какая-то синтаксическая ошибка .. пожалуйста, проверьте и исправьте ее .. У меня нет базы данных на моем компьютере на данный момент ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...