Olá Elcio Considerenado sendo NULL o valor da variavel, eu escreveria a Query assim :
select rc.cli_nome from crd.analise fb, crd.recusado rc where fb.cpf_cgc = rc.cli_cpf_cgc and ( rc.cli_nome LIKE '%', upper(v_nome) || '%' OR v_nome is null) and ( rc.cli_cpf LIKE '%', upper(v_cpf) || '%' OR v_cpf is null) order by fb.data_inclusao desc Alessandro Lúcio Cordeiro da Silva Analista de Sistema þ http://alecordeirosilva.blogspot.com/ O tic-tac do relógio me lembra de algo muito importante que esta acontecendo: estamos vivos. "Joana de Souza Schmitz Croxato" ________________________________ De: J. Laurindo Chiappa <jlchia...@yahoo.com.br> Para: oracle_br@yahoogrupos.com.br Enviadas: Terça-feira, 7 de Agosto de 2012 13:13 Assunto: [oracle_br] Re: DECODE/CASE É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 oracle_br@yahoogrupos.com.br, 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] > [As partes desta mensagem que não continham texto foram removidas]