У меня есть две таблицы; TBL_EMPDETAILS (empdetails_id, EMP_SALARY) and TBL_SERVICE (empdetails_id, Salary, Date_Appointed)
. Идея состоит в том, что когда я обновляю tbl_service (который в основном представляет собой историю зарплат), он должен обновить TBL_EMPDETAILS
до самой последней зарплаты.
Я создал TRIGGER
, но продолжаю получать MUTATION ERROR
. Из моего исследования я видел рекомендуемые составные триггеры, но я не уверен. Я также попробовал прагму автономная_транзакция; перед оператором bgin, но столкнулся с «ОШИБКОЙ ВЗАИМНОЙ БЛОКИРОВКИ»
create or replace trigger Update_Salary
before insert or update on "TBL_SERVICE"
for each row
declare
x number ;
y number ;
z date ;
m date;
begin
x := :NEW."SALARY";
y := :NEW."EMPDETAILS_ID";
z := :NEW."DATE_APPOINTED";
Select max(DATE_APPOINTED)
into m From TBL_SERVICE Where Empdetails_id = y ;
IF z >= m
THEN
update tbl_empdetails Set EMP_SALARY = x Where Empdetails_id = y ;
End If;
commit;
end;
Я ожидаю, что когда я добавлю строку в TBL_SERVICE, например. (empdetails_id, Salary, Date_Appointed) = (100, 500 долларов США, 20 июля 2019 г.) он должен обновить TBL_EMPDETAILS (empdetails_id, EMP_SALARY) до (100, 500 долларов США)
Ошибка мутации -ORA-04091 Ошибка взаимоблокировки -ORA-00060
Итак, я думаю, что COMPOUND TRIGGER ВЫГЛЯДИТ КАК МАРШРУТ, ЧТОБЫ ИДТИ... Я ПРОБОВАЛ КОД НИЖЕ, НО IM ВСЕ ЕЩЕ ЧТО-ТО ПРОПУСТИЛ :(
create or replace TRIGGER "RDC_HR".Update_Salary
FOR UPDATE OR INSERT ON "RDC_HR"."TBL_SERVICE"
COMPOUND TRIGGER
m date ;
AFTER EACH ROW IS
begin
Select max(DATE_APPOINTED) into m From TBL_SERVICE
Where Empdetails_id = :NEW."EMPDETAILS_ID" ;
END AFTER EACH ROW;
AFTER STATEMENT IS
BEGIN
IF (:NEW."DATE_APPOINTED") >= m THEN
update tbl_empdetails Set EMP_SALARY = :NEW."SALARY"
Where Empdetails_id = :NEW."EMPDETAILS_ID" ;
End If;
END AFTER STATEMENT;
end Update_Salary;
tbl_empdetails
триггер или уtbl_service
есть другие триггеры? - person gmiley   schedule 25.07.2019max(DATE_APPOINTED)
), и это было бы двусмысленно. Поэтому Oracle не позволяет вам выполнять запросы к базовой таблице. - person Tad Harrison   schedule 29.07.2019