Нет необходимости select
из целевой таблицы в триггере уровня строки.Вы можете просто получить доступ к значению столбца через запись :new
.Ваш выбор, как показано, имеет дополнительную проблему, заключающуюся в том, что он будет читать всю таблицу, а не только вставленную строку.
Чтобы вызвать исключение, вы используете только raise_application_error
.Ключевое слово RAISE
используется только для того, чтобы повторно выдать исключение, которое было обработано в обработчике исключений.
Чтобы проверить, не превышает ли данная дата более 16 лет, вы можете использовать months_between()
:
CREATE OR REPLACE TRIGGER PREVENT16YRS
BEFORE INSERT OR UPDATE OF compno ON entry
FOR EACH ROW
BEGIN
if months_between(current_date, :new.compdob) < 16 * 12 then
raise_application_error( -20001, 'Too young!' );
end;
END;