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

Stored Procedure Movimento Bancário no Firebird


alemoraes

Pergunta

Boa Noite

Estou fazendo um pequeno programa para movimento de conta corrente

mas a stored procedure que fiz no Firebird 2.5 apresenta um detalhe que não consigo resolver.

Quando realizo o primeiro lançamento o saldo atual aparece null.

A partir do segundo lançamento a procedure calcula o saldo atual normalmente.

Exemplo:

Saldo Ant.       Crédito         Débito        Saldo Atual

0.00                   200.00           0.00            0.00                               Primeiro lançamento

200.00              100.00           0.00           300.00                           Segundo lançamento  ...

 

Gostaria da ajuda de vocês. Abraços

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Leonardo boa tarde

Obrigado pela ajuda

segue o código

SET TERM ^ ;

CREATE PROCEDURE MOVIMENTACAOBANCARIA_INS (

    P_CON_CODIGO Integer,

    P_MOV_CREDITO Numeric(15,2),

    P_MOV_DEBITO Numeric(15,2),

    P_MOV_DESCRICAO Varchar(40) )

AS

DECLARE VARIABLE v_saldo_anterior numeric(15,2);

DECLARE VARIABLE v_saldo_atual numeric(15,2);

DECLARE VARIABLE v_lancamento_anterior integer;

 

BEGIN

  select max(MOV_CODIGO)

  From movimentacaobancaria

  where CON_CODIGO =:p_con_codigo

  into v_lancamento_anterior;

 

if (v_lancamento_anterior is null) then

  begin

     v_saldo_anterior = 0;

  end

  else

  begin

    select MOV_SALDOATUAL

    from movimentacaobancaria

    where MOV_CODIGO = :v_lancamento_anterior

    into v_saldo_anterior;

     v_saldo_anterior = coalesce(:v_saldo_anterior, 0);

 

   v_saldo_atual = :v_saldo_anterior + :p_mov_credito - :p_mov_debito;

   end

 

insert into movimentacaobancaria (

    con_codigo,

    mov_datadolancamento,

    mov_saldoanterior,

    mov_credito,

    mov_debito,

    mov_saldoatual,

    mov_descricao)

  values (

    :p_con_codigo,

    'now',

    :v_saldo_anterior,

    :p_mov_credito,

    :p_mov_debito,

    :v_saldo_atual,

    :p_mov_descricao);

END^

 

SET TERM ; ^

 

GRANT EXECUTE

 ON PROCEDURE MOVIMENTACAOBANCARIA_INS TO  SYSDBA;

Link para o comentário
Compartilhar em outros sites

  • 0

Leonardo, perfeito

Inverti a ordem e está funcionando perfeitamente. Muito obrigado.

A propósito, gostaria de perguntar mais uma dúvida que tenho neste mesmo stored procedure.

o campo COD_CONTA é uma chave estrangeira na tabela MovimentacaoBancaria, e no cadastro de cada 

conta tem um campo com saldo inicial CON_SALDO_INICIAL. Tem como trazer esse valor do saldo inicial

no primeiro lançamento na variável v_saldo_anterior (em vez do 0 - zero). Gostaria de uma ajuda sua, agradecendo

antecipadamente.

Link para o comentário
Compartilhar em outros sites

  • 0
Em 11/02/2019 em 15:13, alemoraes disse:

CREATE PROCEDURE MOVIMENTACAOBANCARIA_INS (
    P_CON_CODIGO Integer,
    P_MOV_CREDITO Numeric(15,2),
    P_MOV_DEBITO Numeric(15,2),
    P_MOV_DESCRICAO Varchar(40) )

Muito provavelmente sim, mas esse código deve ser enviado para a Procedure.

O que é esse P_CON_CODIGO?

Link para o comentário
Compartilhar em outros sites

  • 0

Olá vou descrever as tabelas que uso

P_CON_CODIGO referencia o campo CON_CODIGO (chave estrangeira )

tabela CONTAS

CON_CODIGO (PK)

CON_NUMERODACONTA

CON_AGENCIA

CON_SALDO_INICIAL

CON_DATAINCLUSAO

 

tabela MOVIMENTACAOBANCARIA

MOV_CODIGO (PK)

CON_CODIGO (FK)

MOV_DATADOLANCAMENTO

MOV_SALDOANTERIOR

MOV_CREDITO

MOV_DEBITO

MOV_SALDOATUAL

MOV_DESCRICAO

Link para o comentário
Compartilhar em outros sites

  • 0
15 horas atrás, alemoraes disse:

P_CON_CODIGO referencia o campo CON_CODIGO (chave estrangeira )

Imaginei mesmo, o que ficou confuso foi você ter chamado esse campo de COD_CONTA

Em 11/02/2019 em 20:25, alemoraes disse:

o campo COD_CONTA é uma chave estrangeira na tabela MovimentacaoBancari

Tenta assim

//...
IF (v_lancamento_anterior is null) THEN
  BEGIN
    SELECT CON_SALDO_INICIAL
    FROM CONTAS
    WHERE CON_CODIGO =:p_con_codigo
    INTO v_saldo_anterior;
  END
//...
Editado por Leonardo Persan
Link para o comentário
Compartilhar em outros sites

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...