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;