[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