[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