Problema com cálculo em Procedure
Pessoal, eu criei uma procedure com a seguinte estrutura:
CREATE DEFINER=`root`@`localhost` PROCEDURE `PROC_AtualizaCreditoCliente`(IN `II_CodCliente` INT, IN `ID_Data` DATETIME)
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY INVOKER
COMMENT ''
BEGIN
declare VC_Tipo char(1);
declare VI_CodCredito int;
declare VN_NovoValor decimal(18,2);
declare VN_Valor decimal(18,2);
declare VN_ValorAnterior decimal(18,2);
declare _cursorDONE int default 0;
declare _cursor cursor for
select c.KCredito_CRE,
c.ValorMov_CRE,
c.TipoMov_CRE
from credito c
where c.KCliente_CRE = II_CodCliente
and c.DataCadastro_CRE >= ID_Data
order by c.DataCadastro_CRE;
declare continue handler for not found set _cursorDONE = 1;
/* Selecionar o último movimento de crédito, antes da data informada */
select c.NovoValor_CRE
from credito c
where c.KCliente_CRE = II_CodCliente
and c.DataCadastro_CRE < ID_Data
order by c.DataCadastro_CRE desc
limit 1
into VN_NovoValor;
if (VN_NovoValor is null) then
set VN_NovoValor = 0;
end if;
/* Atualização dos Créditos */
open _cursor;
repeat
if (not _cursorDONE) then
/* Preenche as variáveis com as informações do registro do Select - Loop */
fetch _cursor into VI_CodCredito, VN_Valor, VC_Tipo;
set VN_ValorAnterior = VN_NovoValor;
/* Recalcular Novo Valor */
if (VC_Tipo = 'E') then
set VN_NovoValor = VN_ValorAnterior + VN_Valor;
else
set VN_NovoValor = VN_ValorAnterior - VN_Valor;
end if;
/* Atualizar registro de Crédito */
update credito c
set c.ValorAnt_CRE = VN_ValorAnterior,
c.NovoValor_CRE = VN_NovoValor
where c.KCredito_CRE = VI_CodCredito;
end if;
until _cursorDONE end repeat;
close _cursor;
/* Atualizar crédito do cliente */
update cliente cli
set cli.Credito_CLI = VN_NovoValor
where cli.KCliente_CLI = II_CodCliente;
END
PROBLEMA:
Dentro do loop do cursor estou atribuindo o valor:
set VN_ValorAnterior = VN_NovoValor;
e logo em seguida é feito um novo recalculo para o VN_NovoValor:
/* Recalcular Novo Valor */
if (VC_Tipo = 'E') then
set VN_NovoValor = VN_ValorAnterior + VN_Valor;
else
set VN_NovoValor = VN_ValorAnterior - VN_Valor;
end if;
Só que após refazer o cálculo da variável "VN_NovoValor", ele também altera o valor inicial da variável "VN_ValorAnterior" - valor atribuido logo de início, ou seja, se o VN_ValorAnterior tivesse o valor declarado 10 ... e depois o recalculo atribuisse ao VN_NovoValor 50 .... ao verificar o "VN_ValorAnterior" também esta com valor 50, mesmo sem eu ter atribuido após o recalculo.
Porque isso ocorre e como proceder nesse caso?
Subject
Views
Written By
Posted
Problema com cálculo em Procedure
4819
April 04, 2011 07:45AM
Sorry, you can't reply to this topic. It has been closed.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion
of Oracle or any other party.