У меня есть требование вызывать хранимую процедуру с помощью триггера «после вставки» всякий раз, когда данные вставляются в таблицу, но я запускаю «ошибку ORA-04091: table 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' в производственной системе. Итак, зачем вам нужна процедура, которая ничего не делает? –
Измените процедуру, чтобы ответить на ваш вопрос. Данный сценарий является образцом для более легкого понимания. –