RE: [firebase-br] Alguém me ajude POR FAVOR!!!
Rafael Cabral
rafael.cabral em icraft.com.br
Qua Jun 1 16:10:51 -03 2005
Junior,
Faz o seguinte, altere esse SP para fazer o cálculo do saldo anterior e
retorne para dentro do trigger. Se o valor que vc deseja alterar for apenas
do registro que está sendo incluído ou alterado então com certeza funciona.
Faz o teste. ;)
Não se esqueça de colocar as condições de tipo de lançamento no trigger e
altere o valor usando NEW.SALDO.
[]s,
Rafael Cabral
-----Original Message-----
From: lista-bounces em firebase.com.br
[mailto:lista-bounces em firebase.com.br]On Behalf Of Antonio Bonelli
Junior
Sent: quarta-feira, 1 de junho de 2005 15:40
To: FireBase
Subject: Re: [firebase-br] Alguém me ajude POR FAVOR!!!
Obrigago Cantu, mas não querendo abusar, como posso fazer então para
atualizar esse campo "Saldo" quando incluir ou alterar um determinado
registro na tabela?
[]s
Junior
> Você está criando um loop infinito, pois a procedure atualiza
> registros na tabela, e o trigger da tabela chama a procedure, e o
> processo se repete infinitamente...
>
> []s
> Cantu
> http://www.warmboot.com.br
> FireBase - http://www.FireBase.com.br
>
> ABJ> Boa tarde a todos!
>
> ABJ> Desculpem a insistência, mas estou precisando muito resolver o
> problema na
> ABJ> SP que estou utilizando para atualizar saldos bancários.
>
> ABJ> Tenho a necessidade de atualizar saldos a cada registro
> inserido/alterado
> ABJ> em minha tabela e através de exemplos postados na lista criei a
> procedure
> ABJ> abaixo, porém ao ser executada é retornado o seguinte erro: "Too many
> ABJ> concurrent executions of the same request".
>
> ABJ> Pergunto: Como posso resolver esse problema, pois necessito
> (realmente) do
> ABJ> saldo em cada registro da tabela?
>
> ABJ> Se alguém tiver alguma idéia, POR FAVOR, me ajude...
>
> ABJ> Obrigado
> ABJ> Junior
>
>
> ABJ> *** Procedure ***
> ABJ> ================ABJ> CREATE PROCEDURE ATUALIZARSALDOS (
> ABJ> DATALANCTO DATE,
> ABJ> CODCONTA INTEGER)
> ABJ> AS
> ABJ> DECLARE VARIABLE ULTIMOLANCTO INTEGER;
> ABJ> DECLARE VARIABLE SALDOANTERIOR NUMERIC(15,2) = 0;
> ABJ> DECLARE VARIABLE NROLANBCO INTEGER;
> ABJ> DECLARE VARIABLE TIPOLANCTO VARCHAR(1);
> ABJ> DECLARE VARIABLE VALORLANCTO NUMERIC(15,2);
> ABJ> BEGIN
> ABJ> SELECT MAX(NroLanBco)
> ABJ> FROM MovBancario
> ABJ> WHERE CodConta = :CodConta AND DataLancto < :DataLancto
> ABJ> INTO :UltimoLancto;
>
> ABJ> SELECT Saldo
> ABJ> FROM MovBancario
> ABJ> WHERE NroLanBco = :UltimoLancto
> ABJ> INTO :SaldoAnterior;
>
> ABJ> FOR SELECT NroLanBco, TipoLancto, ValorLancto
> ABJ> FROM MovBancario
> ABJ> WHERE CodConta = :CodConta AND DataLancto >= :DataLancto
> ABJ> ORDER BY DataLancto, NroLanBco
> ABJ> INTO :NroLanBco, :TipoLancto, :ValorLancto
> ABJ> DO
> ABJ> BEGIN
> ABJ> IF (:TipoLancto = 'C') THEN BEGIN
> ABJ> SaldoAnterior = :SaldoAnterior + :ValorLancto;
> ABJ> END ELSE BEGIN
> ABJ> SaldoAnterior = :SaldoAnterior - :ValorLancto;
> ABJ> END
> ABJ> UPDATE MovBancario
> ABJ> SET Saldo = :SaldoAnterior
> ABJ> WHERE NroLanBco = :NroLanBco;
> ABJ> END
> ABJ> END
>
> ABJ> *** Trigger ***
> ABJ> ==============ABJ> CREATE TRIGGER T_MOVBANCARIO_AI FOR MOVBANCARIO
> ABJ> ACTIVE AFTER INSERT OR UPDATE POSITION 0
> ABJ> AS
> ABJ> BEGIN
> ABJ> EXECUTE PROCEDURE AtualizarSaldos(New.DataLancto, New.CodConta);>
ABJ> END
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista