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