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