StoreProcedure - Erro ao atualizar estoque

Firebird

01/02/2009

Boa noite!

Tenho uma tabela chamada tb_estoque onde tenho dois registros para o mesmo produto só que com datas de validades e quantidades diferentes.

cod_produto validade quantidade
3 16/10/2009 2
3 17/10/2009 2

Estou tentando montar uma procedure que atualize o estoque só que está com erro. Ela tem que decrementar a quantidade em estoque de acordo com o número de itens vendidos. Se forem vendidos 4 itens do produdo 3 ela consegue encontrar o registro com o produto com menor data de validade, só que quando eu executo ele não tira 2 de um registro, e dois do outro. Ela tira os quatro de um registro só. então o meu estoque fica negativo. O que devo fazer. Segue abaixo.

CREATE PROCEDURE PROC_ATUALIZA_ESTOQUE (
co_produto integer,
qtd_produto integer)
as
declare variable vcount integer;
declare variable i integer;
begin


select
count(tb_estoque.co_estoque)
from
tb_estoque
where
tb_estoque.co_produto_estoque =:co_produto into :vcount;

i = 0;

while (i <= :vcount) do
begin
update tb_estoque
set
tb_estoque.qtd_produto_estoque = tb_estoque.qtd_produto_estoque - :qtd_produto
where
(tb_estoque.co_produto_estoque = :co_produto) and
tb_estoque.dt_validade_produto_estoque = (select min(tb_estoque.dt_validade_produto_estoque) from tb_estoque where tb_estoque.co_produto_estoque = :co_produto and tb_estoque.qtd_produto_estoque <> 0);
i = i + 1;
end

end


Wilharlley

Wilharlley

Curtidas 0
POSTAR