Во-первых, не нужно указывать имя столбца в объявлении триггера, просто имя таблицы идет сюда
Before insert on table_name
Во-вторых, если мне кажется, что избыточны, я просто скажу "меньше" чем или больше чем ".
В-третьих, номера исключений всегда (насколько я знаю) отрицательны. «-20001» в вашем случае. Вот пример триггера, который вам, вероятно, понадобится
CREATE OR REPLACE Trigger in_vehicle
Before Insert On qq
for each row
Begin
IF(:new.PURCHASE_DATE < to_date('12/31/2016', 'mm/dd/yyyy')) or (:new.PURCHASE_DATE > to_date('01/01/2020', 'mm/dd/yyyy')) THEN
raise_application_error(-20001, 'the Hire date must be between 2017 and 2020');
end if;
end;
С другой стороны, такое ограничение может быть реализовано намного проще с помощью проверочного ограничения для таблицы. Вот так
alter table your_table add constraint purchase_date_2017_2019 check (purchase_date between to_date('01.01.2017', 'dd.mm.yyyy') and to_date('31.12.2019', 'dd.mm.yyyy'));
Недостатком здесь является то, что исключение будет выглядеть как "Ограничение покупки_дата_2017_2019 нарушено". Не требует пояснений и потребностей и дополнительной обработки, чтобы отправить четкое сообщение пользователю
Надеюсь, это поможет