【发布时间】:2019-04-11 19:17:59
【问题描述】:
“ORA-04091:表 JOSEP.EMP 正在变异,触发器/函数可能看不到它”
我必须显示一条消息,其中包含旧工资和新工资,以及其中的受雇人代码(emp_no),但我无法做到。
create or replace trigger emp_AU
after update of salario
on emp for each row
declare
v_emp_no emp.emp_no%type;
begin
select emp_no into v_emp_no FROM emp;
insert into auditaemple VALUES ((select count(*) from auditaemple)+1, 'El salario del empleado '||v_emp_no||'antes era de '||:old.salario||' y ahora será '||:new.salario, sysdate);
end emp_AU;
这样做会产生“ORA-04091:”错误。如果我消除 v_emp_no,我将不会收到消息,但我需要显示雇用的代码。我做错了什么。
提前致谢。
【问题讨论】:
-
使用
:new.emp_no。此外:使用max()+1生成ID 真的是个坏主意。 -
为了避免oracle上的突变,您可以使用复合触发器,但在这里您不需要这样做。只需删除 emp 上的 select 并使用 :new 就像之前的评论一样。对于主键递增列,请使用序列。