Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Firebird 1.0.3 -- Recusividad de Triggers y Procedimientos Almacenados (https://www.clubdelphi.com/foros/showthread.php?t=17163)

jverasobino 27-12-2004 14:20:06

Firebird 1.0.3 -- Recusividad de Triggers y Procedimientos Almacenados
 
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
Código SQL [-]
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


La franja horaria es GMT +2. Ahora son las 02:21:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi