Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-12-2004
jverasobino jverasobino is offline
Registrado
 
Registrado: dic 2004
Posts: 1
Poder: 0
jverasobino Va por buen camino
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.

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

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?

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.

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.
Responder Con Cita
  #2  
Antiguo 27-12-2004
celades celades is offline
No confirmado
 
Registrado: may 2003
Ubicación: Torroella de Montgrí (Girona)
Posts: 42
Poder: 0
celades Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:40:51.


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
Copyright 1996-2007 Club Delphi