PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Procedure!! #412020

27/01/2012

0

Boa noite!!

Estou acompanhando vídeo aulas do DevMedia mesmo (dominando o Firebird). Não estou entendendo muito bem a maneira como essa procedure atualiza o campo saldoanterior.

Quando executo, passo os valores do credito e debito. O saldoatual é feito através do credito e debito e o saldoanterior? Claro que saldoanterior seria o saldoatual do registro anterior, mas não estou vendo isso na procedure, não sei se é o sono, só sei que estou olhando e não vejo a forma que está sendo atualizado esse campo.

Também não entendi essa parte: where CODIGO = :V_LANCAMENTO_ANTERIOR. Pois é, sou novato, faz pouco tempo que comecei a estudar banco de dados. Mas, se alguém puder me ajudar, ficarei grato.

Segue a procedure:

create or alter procedure SET_MOVIMENTACAO_BANCARIA (
P_CONTA integer,
P_CREDITO numeric(15,2),
P_DEBITO numeric(15,2),
P_HISTORICO varchar(255))
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(CODIGO)
from MOVIMENTACAOBANCARIA
where CONTA = :P_CONTA
into V_LANCAMENTO_ANTERIOR;

if (V_LANCAMENTO_ANTERIOR is null) then
begin
V_SALDO_ANTERIOR = 0;
end
else
begin
/*pega o saldo do lancamento anterior*/
select SALDOATUAL
from MOVIMENTACAOBANCARIA
where CODIGO = :V_LANCAMENTO_ANTERIOR
into V_SALDO_ANTERIOR;
end

V_SALDO_ANTERIOR = coalesce(:V_SALDO_ANTERIOR, 0);

/*saldo atual*/
V_SALDO_ATUAL = :V_SALDO_ANTERIOR + :P_CREDITO - :P_DEBITO;

insert into MOVIMENTACAOBANCARIA (DATADOLANCAMENTO, CONTA, CREDITO, DEBITO, SALDOANTERIOR, SALDOATUAL, HISTORICO)
values (now, :P_CONTA, :P_CREDITO, :P_DEBITO, :V_SALDO_ANTERIOR, :V_SALDO_ATUAL, :P_HISTORICO);

end
Willian

Willian

Responder

Posts

27/01/2012

Willian

Boa noite!!

Estou acompanhando vídeo aulas do DevMedia mesmo (dominando o Firebird). Não estou entendendo muito bem a maneira como essa procedure atualiza o campo saldoanterior.

Quando executo, passo os valores do credito e debito. O saldoatual é feito através do credito e debito e o saldoanterior? Claro que saldoanterior seria o saldoatual do registro anterior, mas não estou vendo isso na procedure, não sei se é o sono, só sei que estou olhando e não vejo a forma que está sendo atualizado esse campo.

Também não entendi essa parte: where CODIGO = :V_LANCAMENTO_ANTERIOR. Pois é, sou novato, faz pouco tempo que comecei a estudar banco de dados. Mas, se alguém puder me ajudar, ficarei grato.

Segue a procedure:

create or alter procedure SET_MOVIMENTACAO_BANCARIA (
P_CONTA integer,
P_CREDITO numeric(15,2),
P_DEBITO numeric(15,2),
P_HISTORICO varchar(255))
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(CODIGO)
from MOVIMENTACAOBANCARIA
where CONTA = :P_CONTA
into V_LANCAMENTO_ANTERIOR;

if (V_LANCAMENTO_ANTERIOR is null) then
begin
V_SALDO_ANTERIOR = 0;
end
else
begin
/*pega o saldo do lancamento anterior*/
select SALDOATUAL
from MOVIMENTACAOBANCARIA
where CODIGO = :V_LANCAMENTO_ANTERIOR
into V_SALDO_ANTERIOR;
end

V_SALDO_ANTERIOR = coalesce(:V_SALDO_ANTERIOR, 0);

/*saldo atual*/
V_SALDO_ATUAL = :V_SALDO_ANTERIOR + :P_CREDITO - :P_DEBITO;

insert into MOVIMENTACAOBANCARIA (DATADOLANCAMENTO, CONTA, CREDITO, DEBITO, SALDOANTERIOR, SALDOATUAL, HISTORICO)
values (now, :P_CONTA, :P_CREDITO, :P_DEBITO, :V_SALDO_ANTERIOR, :V_SALDO_ATUAL, :P_HISTORICO);

end


Depois de olhar fixamente para a tela durante alguns minutos, acho que entendi kkk. O v_lancamento_anterior está pegando o codigo do registro anterior de determinada conta e depois é feito a atualização do saldoanterior que recebe o valor do saldoatual. Deve ser isso mesmo.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar