Вам не нужно использовать SELECT в триггере (*) .Определите триггер как FOR EACH ROW, и вы сможете получить доступ к старым и новым значениям любого столбца, принадлежащего таблице.
create or replace TRIGGER TRG_Not_over_5per
BEFORE UPDATE OF F_SALARY ON FACULTY
FOR EACH ROW
Таким образом, ваш код будет выглядеть так:
if :new.f_salary < :old.f_salary * 1.05 then
raise_application_error (
-20000
, 'salary increase must be at least 5%'
);
end if;
Этот способ справиться с нарушением правил - всего лишь предложение.Вы делаете все, что вам нужно.Вам не нужно обрабатывать ветку ELSE: Oracle будет применять обновление по умолчанию.
(*) На самом деле Oracle будет вызывать исключение мутирующей таблицы, если вы попытаетесь это сделать.выполнить запрос, который вы хотите написать. Узнать больше .