[firebase-br] Recalculo de saldo (Trigger)

andre conrado acf.andre em gmail.com
Seg Set 26 13:57:07 -03 2011


Realmente, esqueci de algumas coisas e para não ter mais dúvidas criei
aqui as tabelas e fiz os teste. Agora está OK. Aproveitei e coloquei a
primeira TRIGGER como INSERT OR UPDATE.

CREATE TRIGGER TRG_SALDO_UP_BEFORE FOR LANC ACTIVE BEFORE INSERT OR
UPDATE POSITION 2 AS
DECLARE VARIABLE SALDOANTERIOR INTEGER;

BEGIN

   /* Primeiro passo, obter o saldo anterior, se existirem lançamentos
anteriores então obtenho o saldo do último lançamento caso contrário
obtenho o saldo inicial do banco */

   IF (EXISTS(SELECT 0 FROM LANC WHERE LANC_ID <  NEW.LANC_ID)) THEN
       SELECT FIRST 1 SALDO FROM LANC WHERE LANC_ID <  NEW.LANC_ID
ORDER BY LANC_ID DESC INTO :SALDOANTERIOR;
   ELSE
       SELECT SALDO_INI FROM CADBANCO WHERE CCONTA = NEW.CCONTA INTO
:SALDOANTERIOR;

   /* Calcula o saldo atual */

   NEW.SALDO = SALDOANTERIOR + NEW.CREDITO - NEW.DEBITO;

END



CREATE TRIGGER "TRIGGER TRG_SALDO_UP_AFTER" FOR LANC ACTIVE AFTER
UPDATE POSITION 0 AS
DECLARE VARIABLE LANCAMENTO INTEGER;

BEGIN

   /* Localiza o próximo lançamento */

   SELECT FIRST 1 LANC_ID FROM LANC WHERE LANC_ID > NEW.LANC_ID ORDER
BY LANC_ID INTO :LANCAMENTO;

   /* Simula a alteração do próximo lançamento para que o FIREBIRD
gere uma nova chamada a TRIGGER de atualização do SALDO */

   UPDATE LANC SET CREDITO = CREDITO WHERE LANC_ID = :LANCAMENTO;

END


abçs




Mais detalhes sobre a lista de discussão lista