PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

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:
 
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

Sidney Abreu

Responder

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

Aceitar