PDA

Ver la Versión Completa : Firebird 1.0.3 -- Recusividad de Triggers y Procedimientos Almacenados


jverasobino
27-12-2004, 14:20:06
Holas

Estoy empezando a trabajar con Firebird (v.1.0.3) y estoy metido en el tema de triggers y procedimientos almacenados. :D

Como experimento, traté de actualizar el resultado de unos campos de una tabla a través de un procedimiento almacenado (Proceso de negocio para calcular), el cual es gatillado por un trigger de actualizacion, es decir...se produce recusividad :eek:

explico en detalle lo realizado: 2 tablas A y B:

A = Parametros y Totales Mensuales
B = Detalle de cada mes.

X = Procedimiento Almacenado que calcula según parámetros de "A" y datos de tabla "B". Este procedimiento es gatillado por un trigger de actualización de "A".

si se modifica un parametro en "A", el trigger llama al procedimiento almacenado y actualiza los totales de "A". Esta actualizacion produce un nuevo gatillamiento del trigger, con lo cual se produce recursivdad.

¿Como puedo detener esta recursividad que se produce? :confused:

se que existen eventos (post_event) y excepciones, pero no he encontrado documentación al respecto y no se como se usan, pero tampoco se si me sirven, no quiero hacer depender estos cálculos a la aplicación. :rolleyes:

la idea es desarrollar el proceso de negocio en la DB, y el cliente para registro de datos en PHP4.

cualquier colaboración se agradece.

celades
27-12-2004, 18:00:58
Hola

Lo que quieres con un simple if

trigger before_update o after_update

if ((new.parametro1<>old.parametro1) or (new.parametro2<>old.parametro2)) then
/* parametros etc controlas loscambios de parametros */
execute procedure lo_que_sea
/* solo cambia los totales pero no toques los parametros*/




Si te he entendido bien, esto te lo soluciona

Saludos