【发布时间】:2015-02-05 01:58:54
【问题描述】:
每当数据插入表时,我需要通过“插入后”触发器调用存储过程,但我遇到“错误 ORA-04091:表 TEST.EMP 正在变异,触发器/函数可能看不到它”。我了解此错误背后的原因,但是如何在不影响程序的情况下通过复合触发器克服此错误?
create TABLE emp(
id NUMBER(4),
emp_name VARCHAR2(30),
dept_name VARCHAR2(10));
create or replace PROCEDURE emp_count(dept_name_v emp.dept_name%TYPE) as
DECLARE
dept_emp_count NUMBER(4) := 0;
BEGIN
SELECT count(*) INTO dept_emp_count FROM emp WHERE dept_name = dept_name_v;
UPDATE dept_stat SET d_emp_count = dept_emp_count WHERE dept_name = dept_name_v;
END;
create or replace TRIGGER dept
AFTER INSERT ON emp
FOR EACH ROW
BEGIN
emp_count(:NEW.dept_name);
END;
【问题讨论】:
-
您不要在生产系统中使用
DBMS_OUTPUT。那么为什么你需要什么都不做的程序呢? -
调整程序以回答您的问题。给定的场景是一个更容易理解的样本。
标签: oracle plsql database-trigger mutating-table