Использование триггера для обновления значения - PullRequest
0 голосов
/ 10 мая 2018

Как мне написать простой триггер, чтобы проверить, когда зарплата обновляется, для существующего преподавателя не более 5%.

У меня здесь блок кода.

create or replace TRIGGER TRG_Not_over_5per
BEFORE UPDATE OF F_SALARY ON FACULTY
DECLARE 
sal FACULTY.F_SALARY%TYPE;
BEGIN
SELECT FACULTY.F_SALARY INTO sal FROM FACULTY
-- how do I use the WHERE CLAUSE here so that I get the salary affected

-- do some math on the first and second salary
-- if less than 5%, keep update, if not, reject update.
END;

Заранее спасибо.

1 Ответ

0 голосов
/ 10 мая 2018

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

...