É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]
>