Вы не можете использовать 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.
Гораздо более простым решением было бы просто добавить ограничение и перехватить любую возникающую ошибку.