Programación en castellano
Inicio > Foros > Oracle > ORA-04091 error en trigger de actualizacion realizo una consulta en la misma tabla de la a
-Foros de debate

Oracle
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

ORA-04091 error en trigger de actualizacion realizo una consulta en la misma tabla de la a
Enviado por nelw el día 16 de mayo de 2006

necesito crear un trigger que al actualizarme un campo de una tabla me inserte una fila en otra pero los valores de esta fila son valores que estas en la tabla que esta siendo actualizada me saca el siguiete error

ORA-04091 error de acceso tabla mutando

el codigo es el siguiente alguien tiene una solucion por favor

CREATE OR REPLACE TRIGGER "USUARIO"."ACTU_CIEGO" BEFORE
UPDATE OF "CIEGO"
ON "USUARIOGESMOSA"."OPERACIONES_DEUDA"
FOR EACH ROW WHEN (OLD.NUMERO_OPERACION=OLD.NUMERO_OPERACION
AND OLD.TIPO_MERCADO=OLD.TIPO_MERCADO)
DECLARE
FECHA DATE;
CIEGOOLD OPERACIONES_DEUDA.CIEGO%TYPE;
CIEGONEW OPERACIONES_DEUDA.CIEGO%TYPE ;
NUMEROOPE OPERACIONES_DEUDA.NUMERO_OPERACION%TYPE;
IMPORDESEMAN OPERACIONES_DEUDA.IMPORTE_DESEMBOLSAR%TYPE;
IMPORDESEMACTU OPERACIONES_DEUDA.IMPORTE_DESEMBOLSAR%TYPE;
ESTAOPEANT OPERACIONES_DEUDA.ESTADO_OPERACION%TYPE;
ESTAOPEACTU OPERACIONES_DEUDA.ESTADO_OPERACION%TYPE;
CURSOR CURSOR_OPE_MODIFI IS SELECT NUMERO_OPERACION , IMPORTE_DESEMBOLSAR, ESTADO_OPERACION
FROM FUSION_DETALLE_CLIENTE
WHERE NUMERO_OPERACION =:OLD.NUMERO_OPERACION;

BEGIN

FOR REGISTROMODI IN CURSOR_OPE_MODIFI LOOP
NUMEROOPE :=REGISTROMODI.NUMERO_OPERACION;
IMPORDESEMAN :=REGISTROMODI.IMPORTE_DESEMBOLSAR;
IMPORDESEMACTU :=IMPORDESEMAN;
ESTAOPEANT :=REGISTROMODI.ESTADO_OPERACION;
ESTAOPEACTU :=ESTAOPEANT;
END LOOP;

SELECT TO_DATE(SYSDATE,'DD-MM-YYYY HH24:MI') INTO FECHA FROM DUAL;
INSERT INTO MODIFICACION_OPE_CIEGOS VALUES(NUMEROOPE,FECHA,'CIEGO','CIEGO',IMPORDESEMAN,IMPORDESEMACTU,ESTAOPEANT,ESTAOPEACTU);
END;

 
Re: ORA-04091 error en trigger de actualizacion realizo una consulta en la misma tabla de
Enviado por Huskie el día 16 de mayo de 2006

Obviamente el after update no te rula ¿ verdad ?

 
Re: Re: ORA-04091 error en trigger de actualizacion realizo una consulta en la misma tabla
Enviado por nelw el día 16 de mayo de 2006

pero que pasa cual es el error

 
Re: Re: Re: ORA-04091 error en trigger de actualizacion realizo una consulta en la misma t
Enviado por Huskie el día 16 de mayo de 2006

Nada, olvidalo

 
Re: Re: Re: Re: ORA-04091 error en trigger de actualizacion realizo una consulta en la mis
Enviado por placa1783 el día 30 de mayo de 2006

por lo poco que me acuerdo de base de datos (que puede que este mal)
cuando escribis una tabla se bloquea tanto para lectura como escritura, y seguramente estas tratando leer antes de terminar de modificarla (aunque de eso se encarga DBM y te deberia de ser transparente),
es lo mismo que un SO con procesos concurrentes cuando acceden a memoria compartida
Lo que te dice Huskie supongo yo que es que tenes que escribir algo del estilo " CREATE OR REPLACE TRIGGER "USUARIO"."ACTU_CIEGO" AFTER UPDATE OF "CIEGO"
ON "USUARIOGESMOSA"."OPERACIONES_DEUDA" "
que te permita hacer lo que queres (luego de que se desbloque la tabla)

vos usas un BEFOR (talvez nisiquiera tengas el dato al que queres acceder)

 
Re: Re: Re: Re: Re: ORA-04091 error en trigger de actualizacion realizo una consulta en la
Enviado por julio el día 30 de mayo de 2006

Que tal,
cuando construyes un trigger tienes que utilizar
la menor cantidad de instruccion posibles, con tal
de que no violes la atomicidad de la transaccion,
y quisa el problema sea que tenes un cursos, tenes
un ciclo y usas variables que no necesitas, porque
el mismo administrador maneja los valores viejos y los
nuevos, entonces si quieres hechale una revisada a
esta pagina que esta muy completa con respecto a
triggers http://shrek.wccnet.org/~chasselb/ora291/ExtraMate...
y si queres de todas formas explicame mejor que es lo
que queres hacer, y en que momento queres que se
ejecute el trigger, y veo si te puedo ayudar.

 
Re: Re: Re: Re: Re: Re: ORA-04091 error en trigger de actualizacion realizo una consulta e
Enviado por Alex el día 31 de mayo de 2006

Me da la impresión de que no teneis muy claro lo que es una \"tabla mutante\".
Buen intento del coleguita placa-placa pero un error de tabla mutante te va a dar lo mismo en un AFTER que en un BEFORE.
El julio ha visto algo raro y ha dado un bastonazo a ver si revienta la piñata y ha roto el equipo stereo
Si he leido bien el codigo que ha puesto nelw ( es que ya oigo voces y no penso bien ) aquí el trigger está en una tabla, se monta un cursor sobre otra y se inserta en otra, lo cual me hace pensar que cual es la tabla que está mutando ¿ la del trigger, la del cursor ó la del insert ? y como en esta situación NUNCA he visto este error ( solo lo he visto en tablas cuyo trigger consulta a la misma tabla ) me hace pensar 3 cosas :
1-) Que dos o las tres tablas estén enganchadas por FK
2-) Que alguna de las dos tablas restantes ( la del insert y la del cursor ) tengan a su vez un trigger que haga algo en alguna de las otras otras
3-) Si no es ninguna de las 2, este punto debería rellenarlo el Sr. nelw, aunque es obvio ¿verdad?

Ah, Sr. Placa-Placa, los bloqueos son a nivel de fila, no a nivel de tabla.

Y si quereis saber la solución a este problema, por desgracia bastante comun a ciertos niveles, es usar esta ecuacion :

Paquete de BBDD ( Package ) + Tabla Pl-Sql

A seguir bien, coleguitas

 







Tienda
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad
Mantenida por: Claudio y Dani.

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: jugar gratis | amor | navidad 2009 | registro de dominios | servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados