Ae galera, to com uma dúvida quanto a como fazer uma procedure.

Recebo como parametro um código de material inicial e um final, o que 
preciso fazer é um filtro pelo material inicial até o final. Fiz isto, 
só que acho que da forma que eu fiz tem uma perda de performance, 
gostaria de ver se alguem tem alguma sugestão do que posso fazer. Ai vai 
um exemplo do código.

create or replace procedure busca_posicao_movimentos(
        p_un                              CHAR,
        p_cd_material_ini                 VARCHAR2 DEFAULT ' ',
        p_cd_material_fin                 VARCHAR2 DEFAULT ' ',
        p_data_movimento                  DATE default null,
        p_sequencia_dia                   NUMBER default 0,
        p_c644_data_saldo                 DATE default null) is

   cursor cr_pos_fisica is
          select mov.total_entradas, mov.total_saidas, mov.total_compras
            from esmovime mov
           where mov.uni_neg = p_un
             and p_cd_matterial_ini <= mov.cd_material
             and (mov.cd_material <= p_cd_material_fin or 
p_cd_material_fin is null)

             and mov.sequencia_dia > 0
             and (   p_c644_data_saldo is null
                  or mov.dt_movimento >= p_c644_data_saldo)
             and (  (  p_data_movimento is null)
                  or (    p_sequencia_dia <> 0
                      and (   p_data_movimento > mov.dt_movimento
                           or p_sequencia_dia > mov.sequencia_dia ))
                  or (    p_sequencia_dia = 0
                      and p_data_movimento >= mov.dt_movimento));

...

a minha dúvida em relação ao código acima é que quando entro na função, 
já tenho os valores das variáveis resolvidos então queria saber se não 
tem como fazer um código mais otimizado pois por exemplo:

        ...     and (   p_c644_data_saldo is null
                     or mov.dt_movimento >= p_c644_data_saldo)...

neste código acima, quando abro o cursor, eu já sei se o parametro é 
nulo ou não, e colocando isto no código, acredito que tenha uma perda de 
performance e o oracle acaba não usando o indice por causa do 'or'.

Obrigado


-- 
kbcao / Michel Galle
MSN: [EMAIL PROTECTED]
Mail: [EMAIL PROTECTED]

"Isto não são pedras, são aerolitos!!!"

        
        
                
_______________________________________________________ 
Yahoo! Acesso Grátis - Internet rápida e grátis. 
Instale o discador agora! http://br.acesso.yahoo.com/


______________________________________________________________________

Histórico: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
Falar com os Moderadores:([EMAIL PROTECTED])
Dorian Anderson Soutto - Fernanda Damous - Alisson Aguiar 
______________________________________________________________________ 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a