Pessoal, os dba´s sempre fala que no filtro quando tem a clausula OR deixa 
lento. Nesse caso testo se data dt_confirmacao_documento for null ele busca 
pela data gar.dt_vencimento
como fazer isso sem usar o OR

Muito obrigado

                                select count(distinct mov.numero_venda) qtd
                                                 ,sum(gar.saldo_devedor) 
total_saldo
                                                 ,loj.unidade_servico
                                     from crd.empresa      loj
                                         ,crd.cliente   cli
                                         ,crd.vendas  gar
                                         ,crd.pedido mov                        
                           
                                     where loj.regional LIKE DECODE(p_regional, 
'0', '%','%' || p_regional || '%') 
                                       and loj.filial LIKE DECODE(p_filial, 
'0', '%','%' || p_filial || '%')
                                       and loj.escritorio = p_escritorio  
                                       and loj.grupo = p_cliente
                                       and loj.regional <> 'T0'
                                       and loj.filial   <> 'T0'
                                       and loj.identificacao = '1'
                                       and loj.empresa  = cli.empresa_origem
                                       and cli.cliente = gar.cliente
                                       and cli.empresa = gar.empresa 
                                       and gar.flg_garantia = 'P'  
                                       and (((dt_confirmacao_documento is not 
null) and trunc(dt_confirmacao_documento) >= p_primeiro_dia) or
                                           ((dt_confirmacao_documento is null)  
    and trunc(gar.dt_vencimento)       >= p_primeiro_dia))
                                       and (((dt_confirmacao_documento is not 
null) and trunc(dt_confirmacao_documento) <= p_ultimo_dia) or
                                           ((dt_confirmacao_documento is null)  
    and trunc(gar.dt_vencimento)       <= p_ultimo_dia))                        
           
                                       and gar.numero_venda = mov.numero_venda  
                                
                                       and mov.operacao = '01'
                                       and mov.produto LIKE DECODE(p_produto, 
'0', '%','%' || p_produto || '%') 
                                       and mov.loja_empresa = loj.empresa
                                       and mov.loja_central = loj.central
                                       and mov.loja_loja = loj.loja
                                       --and (loj.fim_atividade is null or 
gar.dt_vencimento < loj.fim_atividade)                                   
                                       group by loj.unidade_servico             
                       
                                       order by loj.unidade_servico
 
Elcio Francisco 

[As partes desta mensagem que não continham texto foram removidas]

Responder a