Oracle - LA TABLA ESTA MUTANDO

 
Vista:

LA TABLA ESTA MUTANDO

Publicado por JOAQUIN (4 intervenciones) el 01/12/2005 22:52:53
tengo un problema con un trigger que me da el error de que el trigger en la tabla esta haciendo referencia a ella misma, y es cierto, pero se supone que se puede hacer cuando el trigger es de nivel de orden es decir sin el FOR EACH ROW, pero siempre me da el problema, porq hacer referencia a una función que tambien ocupa esta misma tabla donde se ejecuta el trigger.. el codigo es:

DECLARE
VCheck NUMBER;
VCodigoCaso NUMBER(20);
VCODIGOUSUARIOSUPERVISORCASO CHAR(10);
VINICIOCASO DATE;
VFINALIZACIONCASO DATE;
VPASODECIERRE NUMBER(15,0);
VCONTAR NUMBER(15,0);

BEGIN
/* Asegurandonos que hay información en la tabla temporal */
BEGIN
SELECT COUNT(*) INTO VCheck FROM TMPSISCASOSACT WHERE ROWNUM=1;
EXCEPTION WHEN NO_DATA_FOUND THEN
VCheck:=-1;
END;

SELECT COUNT(*) INTO VCONTAR FROM SIS_CASOS;
IF VCheck > -1 THEN
BEGIN
SELECT CODIGOCASO,CODIGOUSUARIOSUPERVISORCASO,INICIOCASO,FINALIZACIONCASO,PASODECIERRE
INTO VCodigoCaso,VCODIGOUSUARIOSUPERVISORCASO,VINICIOCASO,VFINALIZACIONCASO,VPASODECIERRE
FROM TMPSISCASOSACT;

UPDATE SIS_CASOS
SET SIS_CASOS.CODIGOUSUARIOSUPERVISORCASO = VCODIGOUSUARIOSUPERVISORCASO,
SIS_CASOS.INICIOCASO = VINICIOCASO,
SIS_CASOS.FINALIZACIONCASO = VFINALIZACIONCASO,
SIS_CASOS.PASODECIERRE = VPASODECIERRE
SIS_CASOS.FechaHoraMaximaEjecucionCaso = SIS_FU_FechaHoraMaxEjeCaso(VINICIOCASO,VCodigoCaso),
SIS_CASOS.FechaHoraNormalEjecucionCaso = SIS_FU_FechaHoraNormalEjeCaso(VINICIOCASO,VCodigoCaso),
SIS_CASOS.FechaHoraExcedidaEjecucionCaso = SIS_FU_FechaHoraExcedeEjeCaso(VINICIOCASO,VCodigoCaso)
WHERE CodigoCaso = VCodigoCaso;
END;
END IF;

END;

las el error se genera en las funciones, porque ocupan la tabla SIS_CASOS...

QUE PUEDO HACER????
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

RE:LA TABLA ESTA MUTANDO

Publicado por Jesús de Diego Alarcón (3 intervenciones) el 02/12/2005 08:48:35
Busca en el manual de PL/SQL por
PRAGMA AUTHONOMOUS TRANSACTION
que te permite lanzar una sentencia en una sesión autónoma respecto de la que lanza el trigger.
Un saludo

JEsús de Diego
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