[firebase-br] SP Recursiva

Rafael Soares listas em racsystems.inf.br
Sáb Jun 4 17:02:19 -03 2005


Boa tarde,

Toda vez que voce inclui/atera um registro na tabela MOVBANCARIO, a trigger 
executa a SP (EXECUTE PROCEDURE ...) e a cada execução da SP voce altera 
registros na tabela MOVBANCARIO (UPDATE MovBancario SET Saldo = 
:SaldoAnterior WHERE NroLanBco = :NroLanBco;) criando um loop sem fim.

[]'s
Rafael Soares

----- Original Message ----- 
From: "Antonio Bonelli Junior" <junior em wwinfo.com.br>
To: <lista em firebase.com.br>
Sent: Tuesday, May 31, 2005 4:19 PM
Subject: [firebase-br] SP Recursiva


Boa tarde a todos da lista!

Tenho a necessidade de atualizar saldos a cada registro inserido/alterado
em minha tabela e através de exemplos postados na lista criei a procedure
abaixo, porém ao ser executada é retornado o seguinte erro: "Too many
concurrent executions of the same request".

Pergunto: Como posso resolver esse problema, pois necessito (realmente) do
saldo em cada registro da tabela?

Obrigado
Junior


*** Procedure ***
=================
CREATE PROCEDURE ATUALIZARSALDOS (
    DATALANCTO DATE,
    CODCONTA INTEGER)
AS
DECLARE VARIABLE ULTIMOLANCTO INTEGER;
DECLARE VARIABLE SALDOANTERIOR NUMERIC(15,2) = 0;
DECLARE VARIABLE NROLANBCO INTEGER;
DECLARE VARIABLE TIPOLANCTO VARCHAR(1);
DECLARE VARIABLE VALORLANCTO NUMERIC(15,2);
BEGIN
   SELECT MAX(NroLanBco)
   FROM MovBancario
   WHERE CodConta = :CodConta AND DataLancto < :DataLancto
   INTO :UltimoLancto;

   SELECT Saldo
   FROM MovBancario
   WHERE NroLanBco = :UltimoLancto
   INTO :SaldoAnterior;

   FOR SELECT NroLanBco, TipoLancto, ValorLancto
       FROM MovBancario
       WHERE CodConta = :CodConta AND DataLancto >= :DataLancto
       ORDER BY DataLancto, NroLanBco
       INTO :NroLanBco, :TipoLancto, :ValorLancto DO BEGIN
     IF (:TipoLancto = 'C') THEN BEGIN
       SaldoAnterior = :SaldoAnterior + :ValorLancto;
     END ELSE BEGIN
       SaldoAnterior = :SaldoAnterior - :ValorLancto;
     END
     UPDATE MovBancario
     SET Saldo = :SaldoAnterior
     WHERE NroLanBco = :NroLanBco;
   END
END

*** Trigger ***
===============
CREATE TRIGGER T_MOVBANCARIO_AI FOR MOVBANCARIO
ACTIVE AFTER INSERT OR UPDATE POSITION 0
AS
BEGIN
  EXECUTE PROCEDURE AtualizarSaldos(New.DataLancto, New.CodConta);
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

__________ Informação do NOD32 1.1100 (20050518) __________

Esta mensagem foi verificada pelo NOD32 Sistema Antivírus
http://www.nod32.com.br






Mais detalhes sobre a lista de discussão lista