проверьте перед добавлением ограничения в таблицу (оракул) - PullRequest
6 голосов
/ 28 мая 2011

Я хочу добавить ограничение в таблицу, но перед добавлением я должен проверить, существует ли ограничение в таблице или нет как

IF NOT EXISTS(some condition)

ADD CONSTRAINT CHK_DATES_VALID
CHECK ((DATE_NORMAL != 'n' AND DATE_NORMAL != 'N') OR
       (DATE_SCHEDULED != 'n' AND DATE_SCHEDULED != 'N') OR
       (DATE_WINDOW != 'n' AND DATE_WINDOW != 'N'));

перед добавлением ограничения 'CHK_DATES_VALID' мне нужно проверить, является ли ограничение существующим или нет пожалуйста, направьте меня, чтобы сделать это условие.

1 Ответ

7 голосов
/ 29 мая 2011

Вы не можете использовать IF, как это.

Вам необходимо проверить системное представление ALL_CONSTRAINTS , чтобы выяснить, является ли ограничение, если оно уже определено:

DECLARE 
  num_rows integer;
BEGIN
   SELECT count(*)
      INTO num_rows
   FROM all_constraints
   WHERE constraint_name = 'CHK_DATES_VALID';

   IF num_rows = 0 THEN 
       EXECUTE IMMEDIATE 'ALTER TABLE the_table 
         ADD CONSTRAINT CHK_DATES_VALID
         CHECK ((to_upper(DATE_NORMAL) != ''N'') OR
                (to_upper(DATE_SCHEDULED) != ''N'') OR
                (to_upper(DATE_WINDOW) != ''N''))';
   END IF;
END;
/

EXECUTE IMMEDIATE необходимо, поскольку вы не можете запуститьDDL непосредственно в блоке PL / SQL.

Гораздо более простым решением было бы просто добавить ограничение и перехватить любую возникающую ошибку.

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