alemoraes Postado Fevereiro 10, 2019 Denunciar Share Postado Fevereiro 10, 2019 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Leonardo Persan Postado Fevereiro 11, 2019 Denunciar Share Postado Fevereiro 11, 2019 E como está a Stored Procedure atualmente? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 alemoraes Postado Fevereiro 11, 2019 Autor Denunciar Share Postado Fevereiro 11, 2019 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Leonardo Persan Postado Fevereiro 11, 2019 Denunciar Share Postado Fevereiro 11, 2019 2 horas atrás, alemoraes disse: v_saldo_atual = :v_saldo_anterior + :p_mov_credito - :p_mov_debito; end Tenta inverter a ordem dessas duas linhas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 alemoraes Postado Fevereiro 11, 2019 Autor Denunciar Share Postado Fevereiro 11, 2019 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Leonardo Persan Postado Fevereiro 12, 2019 Denunciar Share Postado Fevereiro 12, 2019 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 alemoraes Postado Fevereiro 12, 2019 Autor Denunciar Share Postado Fevereiro 12, 2019 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Leonardo Persan Postado Fevereiro 13, 2019 Denunciar Share Postado Fevereiro 13, 2019 (editado) 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 Fevereiro 13, 2019 por Leonardo Persan Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 alemoraes Postado Fevereiro 13, 2019 Autor Denunciar Share Postado Fevereiro 13, 2019 Leonardo, boa noite Testei aqui seu código que me passou e está funcionando perfeitamente. Tu é o cara camarada. Muito obrigado mesmo. Abraços Tópico RESOLVIDO Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Leonardo Persan Postado Fevereiro 14, 2019 Denunciar Share Postado Fevereiro 14, 2019 Imagina rsrsrs Precisando só dar um toque Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
alemoraes
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
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.