trigger tabla mutando

joaquin soto
02 de Diciembre del 2005
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????

joaquin soto
02 de Diciembre del 2005
señores encontre el problema, simplemente hay que ejecutar las funciones y almacenarlas en una variable..

gracias.