Olá pessoal, espero que possam me ajudar, estou com um problema com uma procedure,
a ideia é que ela faça um rateio do preço a cada nova compra... muito bem... aqui esta a procedure:
SET TERM ^ ;
create or alter procedure RATEIA_PRECO (
COD_PRODUTO integer,
QTDE_NOVA numeric(10,2),
VALOR_NOVO numeric(10,2))
as
declare variable VALOR_ATUAL numeric(10,2);
declare variable QTDE_ATUAL numeric(10,2);
declare variable QTDE_TOTAL numeric(15,2);
declare variable VALOR_TOTAL_ATUAL numeric(10,2);
declare variable VALOR_RATEADO numeric(10,2);
begin
select T_PRODUTO.QTDE_ATUAL_PRO
from T_PRODUTO
where T_PRODUTO.COD_PRO = :COD_PRODUTO
into :QTDE_ATUAL;
select T_PRODUTO.PRECO_UNI_PRO
from T_PRODUTO
where T_PRODUTO.COD_PRO = :COD_PRODUTO
into :VALOR_ATUAL;
VALOR_TOTAL_ATUAL =(QTDE_ATUAL * VALOR_ATUAL);
QTDE_TOTAL =(QTDE_NOVA + QTDE_ATUAL);
VALOR_RATEADO =((VALOR_NOVO + VALOR_TOTAL_ATUAL) / QTDE_TOTAL);
if (VALOR_TOTAL_ATUAL = 0) then
begin
VALOR_RATEADO =(VALOR_RATEADO * 2);
end
update T_PRODUTO
set T_PRODUTO.PRECO_UNI_PRO = :VALOR_RATEADO
where T_PRODUTO.COD_PRO = :COD_PRODUTO;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON T_PRODUTO TO PROCEDURE RATEIA_PRECO;
GRANT EXECUTE ON PROCEDURE RATEIA_PRECO TO SYSDBA;
Muito bem, supondo que eu esteja fazendo uma compra, e quando salvar, para cada item de compra eu chamo esta procedure
passando como parâmetro o código do produto, a quantidade que foi comprada, e o valor total do item, exemplo:
Tabela Produto.
Código: 1
Nome: X
Qtde.: 150
Preço Unitario: 63,20
Compra.
Código Produto: 1
Qtde.: 150
Preço Unitário: 100,00
Preço total: 15.000,00
Agora seguindo a procedure, ela busca os dados da tabela e guarda os dados nas variáveis QTDE_ATUAL e VALOR_ATUAL logo
ela pega a variável VALOR_TOTAL_ATUAL e atribui à essa variável o resultado da multiplicação da QTDE_ATUAL * VALOR_ATUAL.
Após isso ela atribui o resultado de QTDE_NOVA + QTDE_ATUAL para a variável QTDE_TOTAL, Ok.
Somente agora ela faz a conta que irá ratear o valor para o produto, que seria atribuir o resultado de ((VALOR_NOVO + VALOR_TOTAL_ATUAL) / QTDE_TOTAL)
à variável VALOR_RATEADO sendo que a variável VALOR_NOVO corresponde ao valor que eu passo como parametro, muito bem, seguindo o exemplo anterior
ficaria assim:
// VALOR_NOVO = 15.000,00;
// QTDE_NOVA = 150;
// QTDE_ATUAL = 150;
// VALOR_ATUAL = 63.20;
VALOR_TOTAL_ATUAL =(150 * 63.20); // = 9480
QTDE_TOTAL =(150 + 150); // = 300
VALOR_RATEADO =((15.000 + 9480) / 300); // = 81,60
O novo valor unitário deveria ser 81,60, más não é o que está acontecendo, o novo valor está vindo como: 75,47
por isso não estou entendendo o que esta acontecendo...
se alguém puder me ajudar eu agradeço!