Ir para conteúdo
Fórum Script Brasil
  • 0

Erro em Stored Procedure de Update com Firebird


delphisempre

Pergunta

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;

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...