[firebase-br] Recalculo de saldo (Trigger)
Fabiano Lima
frguitar em bol.com.br
Sex Set 23 17:55:50 -03 2011
Então cara, funcionou em partes. Mas deve ser por culpa de nao explicar direito.
Eu gostaria que o calculo fosse executado para cada uma das linhas.
Por exemplo eu tenho 5 lançamentos, e resolvo editar o CREDITO do lançamento 3, então queria que a trigger recalculasse o valor no lançamento 3, e depois fosse atualizar o 4 e o 5.
Com a trigger abaixo, ele calcula o saldo e salva o mesmo saldo nas linhas posteriores.
////////////////////////////////////
CREATE OR ALTER trigger trg_saldo_up for lanc
active after update position 2
AS
DECLARE VARIABLE LANCAMENTO INTEGER;
DECLARE VARIABLE BANCOSALDO INTEGER;
DECLARE VARIABLE TOTCRED INTEGER;
DECLARE VARIABLE TOTDEB INTEGER;
BEGIN
SELECT SALDO_INI FROM CADBANCO WHERE CCONTA = NEW.CCONTA INTO :BANCOSALDO;
SELECT SUM (CREDITO) FROM LANC WHERE LANC_ID <= NEW.LANC_ID INTO :TOTCRED;
SELECT SUM (DEBITO) FROM LANC WHERE LANC_ID <= NEW.LANC_ID INTO :TOTDEB;
FOR SELECT LANC_ID
FROM LANC
WHERE LANC_ID > NEW.LANC_ID
INTO :LANCAMENTO DO
UPDATE LANC
SET SALDO = :BANCOSALDO + :TOTCRED - :TOTDEB
WHERE LANC_ID = :LANCAMENTO;
END
Ja li pelo google que nesses casos é melhor não calcular o saldo no banco e mostrar ele somente na pesquisa, porem eu teria que criar uma procedure que fcalculasse cada uma das linhas, o que volta na mesma questão da trigger.
Agradeço desde já qualquer ajuda.
Att
Fabiano
____________________________________________
Em 23/09/2011 08:34, andre conrado < acf.andre em gmail.com > escreveu:
Olá amigo!!!
Seu FOR SELECT precisa de correção:
Você está selecionando (FOR SELECT) o campo SALDO para dentro (INTO)
da variável LANCAMENTO.
O correto deveria ser:
FOR SELECT LANC_ID
........
INTO :LANCAMENTO
.....
abçs
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista