Élcio, tá meio confuso esse texto, mas SUPONDO que com "em branco" vc quis 
dizer NULL (são coisas diferentes uma variável e/ou coluna não-preenchida E uma 
com brancos) E QUE seja apenas as variáveis externas v_xx que possam conter 
NULLs (e não as colunas das tabelas) vc simplesmente tem que tratar os NULLs, 
pois como sabemos um NULL nunca é igual a nada, nunca é diferente de nada, NULL 
é um valor DESCONHECIDO, isso é a Base da lógica tri-valorada (Verdade, Falso 
ou NULO) no RDBMS Oracle .... Outro ponto é o citado em 
http://www.oratechinfo.co.uk/nulls.html#null11 , de que o LIKE (óbvio) espera 
receber uma string com wild characters, portatnto VAI ignorar NULOs, NULLs não 
são iguais a uma string nunca ....
   Não dá pra saber à distância, mas me parece que vc está caindo nesssas 
falhas acima - uma tratativa possível é 'transformar' os NULLs em algum valor 
via NVL, tenta isso - abaixo um exemplo, NÃO o mais performático nem o 
"melhor", mas apenas uma prova de conceito, e SEM usar DECODE ou CASE, já que 
não há necessidade deles em princípio ao que entendo  : 

 SCOTT@O10GR2::SQL>l
 SCOTT@O10GR2::SQL>select e.deptno, d.dname, e.empno, e.ename from emp e, dept d
  2   where e.deptno = d.deptno
  3*    and upper(e.ename) like upper( '%' || nvl(:v_ename, e.ename) || '%')
  
=> vou criar a variável, que como toda variável se nada for indicado é criada 
como Vazia, NULA :
  
SCOTT@O10GR2::SQL>variable V_ENAME varchar2(40)
SCOTT@O10GR2::SQL>print v_ename

V_ENAME
--------------------------------------------------------------------------------------------------------------------------------


SCOTT@O10GR2::SQL>

==> executo com a variável nula, o nvl bota o valor da coluna na string e 
portanto vem todo mundo :

            DEPTNO DNAME                       EMPNO ENAME
------------------ -------------- ------------------ ----------
                20 RESEARCH                     7369 SMITH
                30 SALES                        7499 ALLEN
                30 SALES                        7521 WARD
                20 RESEARCH                     7566 JONES
                30 SALES                        7654 MARTIN
                30 SALES                        7698 BLAKE
                10 ACCOUNTING                   7782 CLARK
                20 RESEARCH                     7788 SCOTT
                10 ACCOUNTING                   7839 KING
                30 SALES                        7844 TURNER
                20 RESEARCH                     7876 ADAMS
                30 SALES                        7900 JAMES
                20 RESEARCH                     7902 FORD
                10 ACCOUNTING                   7934 MILLER
                10 ACCOUNTING                   7777 allende

15 linhas selecionadas.

=> vou passar um argumento , o NVL não mexe no valor :

SCOTT@O10GR2::SQL>exec :v_ename := 'all';

Procedimento PL/SQL concluido com sucesso.

SCOTT@O10GR2::SQL>/

            DEPTNO DNAME                       EMPNO ENAME
------------------ -------------- ------------------ ----------
                30 SALES                        7499 ALLEN
                10 ACCOUNTING                   7777 allende

SCOTT@O10GR2::SQL>

  []s
  
    Chiappa
        

--- Em [email protected], Elcio Francisco <elciofrancisco@...> 
escreveu
>
> Pessoal tenho uma query aqui, onde o usuario pode consultar por CPF ou por 
> NOME. Porem do jeito que ela esta se o nome for branco não traz nada. Eu 
> preciso colocar no filtro para buscar apenas o CPF ou o NOME do jeito que 
> esta ele busca os 2 campos.
> 
> Alguem pode me ajudar
> 
> 
> 
>                                       select rc.cli_nome
>                                         from crd.analise fb
>                                             ,crd.recusado        rc 
>                                       where  fb.cpf_cgc              = 
> rc.cli_cpf_cgc                 
>                                         and rc.cli_nome  LIKE 
> DECODE(upper(v_nome),NULL,'%', upper(v_nome) || '%')                          
>                                                  
> 
>                                         and rc.cli_cpf  LIKE 
> DECODE(upper(v_cpf),NULL,'%', upper(v_cpf) || '%')
>                            order by fb.data_inclusao desc
> 
> 
> Muito Obrigado
>  
> Elcio Francisco  
> 
> P Antes de imprimir pense em sua responsabilidade com o MEIO AMBIENTE
>          Adote os 3Rs na sua vida: Reduza, Reutilize, Recicle!
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a