Fórum Procedure Listar Estoque #401172
17/05/2011
0
Galera eu estou precisando da ajuda de vocês.
É o seguinte: Eu tenho uma tabela de produtos onde os produtos são cadastrados e tenho um tabela de estoque, onde controla toda movimentação de entradas e saidas.
eu preciso lista o estoque atual de cada produto por loja, ex:
PRODUTO | estoque_LOJA1 | estoque_LOJA2 | estoque_LOJA....
0001 100 40 47
0002 300 30 65
0003 160 60 46
No meu select eu tenho que ir na tabela de estoque e pegar o estoque atual do ultimo lançamento daquele produto e jogar ele nessa lista.
Eu criei uma Store Procedure para fazer esse select, só que agora que eu fiz varios lançamento notei que ela ficou muito lenta. Tem como melhor a performe dela?
Procedure:
É o seguinte: Eu tenho uma tabela de produtos onde os produtos são cadastrados e tenho um tabela de estoque, onde controla toda movimentação de entradas e saidas.
eu preciso lista o estoque atual de cada produto por loja, ex:
PRODUTO | estoque_LOJA1 | estoque_LOJA2 | estoque_LOJA....
0001 100 40 47
0002 300 30 65
0003 160 60 46
No meu select eu tenho que ir na tabela de estoque e pegar o estoque atual do ultimo lançamento daquele produto e jogar ele nessa lista.
Eu criei uma Store Procedure para fazer esse select, só que agora que eu fiz varios lançamento notei que ela ficou muito lenta. Tem como melhor a performe dela?
Procedure:
CREATE PROCEDURE SP_LISTA_ESTOQUE returns ( prod_id integer, prod_ean dm_cod_barras, prod_descricao varchar(80), prod_pco_varejo dm_valor, status varchar(8), estoque_l1 numeric(9,3), estoque_l2 numeric(9,3)) as declare variable id_loja integer; declare variable est_saldo numeric(9,3); BEGIN FOR SELECT produtos.prod_id, produtos.prod_ean, produtos.prod_descricao, produtos.prod_pco_varejo, case when produtos.prod_status = 'A' then 'ATIVO' else 'INATIVO' end as prod_status FROM PRODUTOS ORDER BY 1 INTO :prod_id, :prod_ean, :prod_descricao, :prod_pco_varejo, :status DO BEGIN ESTOQUE_L1 = 0; ESTOQUE_L2 = 0; for select coalesce(e1.loj_id, -1), coalesce(e1.estoq_atual,0) from estoque e1 where e1.prod_id = :prod_id and e1.estoq_id = (select max(e2.estoq_id) from estoque e2 where e2.prod_id = e1.prod_id and e2.loj_id = e1.loj_id) into :id_loja, :est_saldo do begin if (:id_loja = 1) then ESTOQUE_L1 = est_saldo; else if (:id_loja = 2) then ESTOQUE_L2 = est_saldo; end suspend; END END
Sidney Abreu
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)