Jump to content
Fórum Script Brasil
  • 0

Stored Procedure Movimento Bancário no Firebird


alemoraes

Question

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 to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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
//...
Edited by Leonardo Persan
Link to comment
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
Answer this question...

×   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.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.7k
×
×
  • Create New...