Oracle - Error ORA-04091 .....is mutating

 
Vista:

Error ORA-04091 .....is mutating

Publicado por Ivan_DC (1 intervención) el 16/05/2012 02:04:01
Buenas
mi problema es el siguiente
quiero insertar dos tablas al mismo tiempo
tengo una tabla llamada empleado con los campos ( cedula_empleado, nombre, apellido, direccion, telefono, salario, fecha_ingreso y funcion ) y la PK es cedula_empleado
y otra tabla estado donde tengo los campos (cedula_empleado y estado) donde cedula_empleado es llave foranea de empleado
lo que quiero hacer es que cuando registre un empleado nuevo automaticamente se llene la tabla estado colocando la cedula del empleado que se ha registrado y colocando su estado activo

haciendo esto en us select no hay problema porq busco la cedula del ultimo registro de empleado con rowid y lo inserto en la tabla estado
INSERT ALL
INTO estado
VALUES (cedula_empleado, 'activo')
SELECT cedula_empleado
FROM empleado
WHERE empleado.cedula_empleado = (SELECT cedula_empleado FROM empleado
WHERE rowid IN (SELECT max(rowid) FROM empleado));

con esa consulta hace lo que yo quiero,, pero el problema es q cuando coloco esa consulta en un trigger no me funciona y me sale Error ORA-04091
el trigger que pongo es:
create or replace trigger "EMPLEADO_REGISTRAR_ESTADO"
AFTER
insert or update on "EMPLEADO"
for each row
begin
INSERT ALL
INTO estado
VALUES (cedula_empleado, 'Activo')
SELECT cedula_empleado
FROM empleado
WHERE empleado.cedula_empleado = (SELECT cedula_empleado FROM empleado
WHERE rowid IN (SELECT max(rowid) FROM empleado));
end;​
hay alguna forma de solucionarlo??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error ORA-04091 .....is mutating

Publicado por jose (1 intervención) el 15/06/2012 18:08:44
si, estable el trigger como un :
pragma autonomous_transaction

y controla tus los commit y rollback
esa exepcion es por realizar una operacion con la tabla que dispara el trigger.

La otra opcion es que el trigger llame a un procedimiento y en este colocas todo.
saludos

Destino Repuesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar