Sign in to follow this  
delphisempre

Erro em Stored Procedure de Update com Firebird

Recommended Posts

Olá, boa tarde

Trabalhando ainda na minha tabela MovimentacaoBancaria, Fiz uma Stored Procedure

para fazer um Update na tabela toda vez que o Usuario fizer uma alteração no valor do Débito ou do Crédito

a Stored Procedure pega o saldo anterior do registro atual, pega o valor que foi alterado e atualiza o saldo atual.

Mas além disso, gostaria que, por exemplo, tiver 15 registros lançados,  ele atualizou a linha 5 e tiver mais 10 registros depois,

a Procedure atualizasse todos os saldos anteriores e atuais subsequentes até o último registro.

Estou postando a Stored Procedure que fiz, pois ela não está atualizando nem o registro atual e nem os saldos subsequentes.

Obs: O teste que fiz usando o IBExpert e Firebird 2.5

ao executar a Stored Procedure apresenta a seguinte mensagem:

multiple rows in singleton select.

multiple rows in singleton select.

At procedure 'MOVIMENTACAOBANCARIA_UPD' line: 27, col: 6.

 

Desde já agradeço pela ajuda.

SET TERM ^ ;

 

PROCEDURE MOVIMENTACAOBANCARIA_UPD (

    P_CON_CODIGO Integer,

    P_MOV_DATADOLANCAMENTO Date,   

    P_MOV_CREDITO Numeric(15,2),

    P_MOV_DEBITO Numeric(15,2),

    P_MOV_DATAALTERACAO Date,

    P_MOV_DESCRICAO Varchar(40) )

AS

DECLARE VARIABLE v_saldo_anterior numeric(15,2);

DECLARE VARIABLE v_saldo_atual numeric(15,2);

BEGIN

  begin

     SELECT MOV_SALDOANTERIOR

    FROM MOVIMENTACAOBANCARIA

    WHERE CON_CODIGO =:p_con_codigo

    And MOV_DATADOLANCAMENTO = :P_MOV_DATADOLANCAMENTO

    INTO v_saldo_anterior; 

    v_saldo_anterior = coalesce(:v_saldo_anterior, 0);   

  end


 

  v_saldo_atual = :v_saldo_anterior + :p_mov_credito - :p_mov_debito;

 

  IF (EXISTS(SELECT 1 FROM MOVIMENTACAOBANCARIA

   WHERE CON_CODIGO = :P_CON_CODIGO

   AND MOV_DATADOLANCAMENTO = :P_MOV_DATADOLANCAMENTO)) THEN

  BEGIN

  UPDATE MOVIMENTACAOBANCARIA SET

    con_codigo                  =  :p_con_codigo,

    mov_datadolancamento = :p_mov_datadolancamento,

    mov_saldoanterior        = :v_saldo_anterior,

    mov_credito                 = :p_mov_credito,

    mov_debito                  = :p_mov_debito,

    mov_saldoatual             = :v_saldo_atual,

    mov_dataalteracao         = 'now',

    mov_descricao             = :p_mov_descricao

  Where CON_CODIGO = :p_con_codigo And

    mov_datadolancamento = :p_mov_datadolancamento;  


 

   END


 

END^


 

SET TERM ; ^


 

GRANT EXECUTE

 ON PROCEDURE MOVIMENTACAOBANCARIA_UPD TO  SYSDBA;

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this