Re: [firebase-br] Alguém me ajude POR FAVOR!!!

Carlos H. Cantu listas em warmboot.com.br
Qua Jun 1 15:27:12 -03 2005


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






Mais detalhes sobre a lista de discussão lista