請使用此函數需要更多幫助,該函數假設返回將由觸發器檢索的退休日期,並使用DOFA中的值更新EMPLOYEES_MASTER_DETAILS表上的EDOR「退休日期」 hire_date「退休日期FUNCTION和TRIGGER
函數和觸發器已成功編譯。但是,每當我更新記錄時,我都會收到此錯誤消息...!已經發生
1錯誤ORA-04091:表 DBA_AUWAL.EMPLOYEES_MASTER_DETAILS被突變,觸發/功能可能 看不到它ORA-06512:在 「DBA_AUWAL.EDOR_FUNCTION」,第9行
ORA-06512:在「DBA_AUWAL.EDOR_FUNCTION」,線路17 ORA-06512:在 「DBA_AUWAL.EDOR_IN_TRG」,第2行ORA-04088:錯誤的 觸發 'DBA_AUWAL.EDOR_IN_TRG'
My功能執行期間是
create or replace function EDOR_FUNCTION(DOFA in date)
return date
is
dofa_date date;
dob_date date;
new_edor_date date;
cursor c1 is
SELECT DOFA
FROM EMPLOYEES_MASTER_DETAILS;
cursor c2 is
SELECT date_of_birth
FROM EMPLOYEES_MASTER_DETAILS;
BEGIN
open c1;
fetch c1 into dofa_date;
close c1;
open c2;
fetch c2 into dob_date;
close c2;
if dofa_date - dob_date <= 25 then new_edor_date := add_months(dofa_date, 35*12);
else new_edor_date := add_months(dob_date, 60*12);
end if;
return new_edor_date;
END;
這是觸發
create or replace TRIGGER EDOR_IN_TRG
before INSERT OR UPDATE ON EMPLOYEES_MASTER_DETAILS
FOR EACH ROW
BEGIN
:new.EDOR := EDOR_FUNCTION(:new.DOFA);
END;
試着讓你的觸發器成爲'之後'而不是'之前',或者將這個邏輯移入一個存儲過程。 - [引用這個問題w /你的錯誤](http://dba.stackexchange.com/a/5439/36762) –