[oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-08-01 Por tôpico rei_c_s
Olá Pablo,
   veja se entendi sua pergunta: vc tem uma tela A(codigo, texto) onde texto é 
um string de caracteres como o texto que agora digito. Na tela da aplicação vc 
vai colher algumas palavras: B(word1, word2, word3, wordn) e deseja fazer um 
select na tabela A de forma a que retorne todos os codigos de A cujos 
respectivos textos contenham todas as palavras do conjunto B ao mesmo tempo em 
alguma posição do string texto, sem importar a ordem.

Se é isso, tenho uma solução.

1 - implementar a função que retorna uma tabela de strings quando chamada tendo 
como argumento um outro string contendo espaços entre os sbstrings (função e 
tipos), que postei aqui essa semana.

2 - implementar a função mais abaixo.

Teste:
Tomemos a tabela exemplo:

  SELECT CODIGO, TEXTO FROM TEXTODOC 

CODIGO |TEXTO
100|word1 word2 word3 word4 word5 word6 word7 word9
110|word7 word8 word9
130|word0 word1 word7 word9

O usuário digitou as palavras (word7, word1), que encontram-se simultaneamente 
nos registros de código 100 e 130.

O select que retornaria uma TABELA com os respectivos códigos seria:

SELECT word codigo FROM table (codcontem ('word1 word7'));

CODIGO
--
100   
130   

2 rows selected.

OBS: Tem algumas fragilidades, por exemplo 'assim,' é diferente de 'assim', ou 
seja, com a vírgula e sem a vírgula justaposta ao 'assim', então é preciso 
alguma melhoria para tratar esses casos e outros parecidos.

abraço

Reinaldo

CREATE OR REPLACE FUNCTION codcontem (vva VARCHAR2)
   RETURN wordarray
   PIPELINED
AS
   vvarVARCHAR (100);
   vvar1   INTEGER;
   vvar2   INTEGER;
   recswordarray := wordarray ();
BEGIN
   FOR c1 IN (SELECT   * FROM textodoc)
   LOOP
  SELECT   COUNT ( * ) INTO vvar1 FROM table (wordlist (VVA));


  SELECT   COUNT ( * )
INTO   vvar2
FROM  table (wordlist (c1.texto)) a
   INNER JOIN
  TABLE (WORDLIST (VVA)) b
   ON a.word = b.word;

  IF vvar1 = vvar2
  THEN
 recs.EXTEND ();
 recs (recs.COUNT ()) := wordobject (TO_CHAR (c1.codigo));
  END IF;
   END LOOP;

   FOR i IN 1 .. recs.COUNT ()
   LOOP
  PIPE ROW (recs (i));
   END LOOP;

   RETURN;
END;


--- Em oracle_br@yahoogrupos.com.br, Pablo Câmara  escreveu
>
> Isso, com o exists funciona...
> 
> Mas só por curiosidad, como funcional o =ALL nesse caso?
> 
> Pablo
> 
> 
> 
> 
> 
> 2009/7/31 jlchiappa 
> 
> >
> >
> > Colega, o exemplo que vc deu é TOTALMENTE diferente do que assumi no começo
> > da thread : nesse que vc deu agora vc tem, EM REGISTROS DIFERENTES, colunas
> > com o valor 3 e colunas com o valor 1 : tudo o que eu tinha dito é se os
> > vários valores estivessem na ** MESMA ** ocorrencia da ** MESMA ** coluna no
> > MESMO registro, sendo registros diferentes muda COMPLETAMENTE de figura, aí
> > sim tente com algum tipo de sub-query, procvavelmente EXISTS...
> >
> > []s
> >
> > Chiappa
> >
> > --- Em oracle_br@yahoogrupos.com.br ,
> > Pablo Câmara  escreveu
> >
> > >
> > > Gostaria que viesse o resultado: cod = 1 (apenas)
> > > Já que o cod 1 possui tanto o vlr 1 e o vlr 3
> > >
> > >
> > >
> > >
> > > 2009/7/31 jlchiappa 
> > >
> > > >
> > > >
> > > > Não, colega, não : ** releia ** a minha msg, eu disse :
> > > >
> > > > coluna like p1 AND coluna like p2 AND coluna like p3
> > > >
> > > > é AND pra que obedeça a todas as condições, e não OR, yes ???
> > > >
> > > > []s
> > > >
> > > > Chiapa
> > > >
> > > > --- Em oracle_br@yahoogrupos.com.br 
> > > >  > 40yahoogrupos.com.br>,
> > > > Pablo Câmara  escreveu
> > > > >
> > > > > Chiappa,
> > > > > Valeu pela ajuda...mas não conseguí.
> > > > > A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%' and
> > > > COLUNA
> > > > > like '%param3%'
> > > > > No meu caso não funcionou.
> > > > >
> > > > > No meu exemplo:
> > > > >
> > > > > CREATE TABLE arq.teste (cod NUMBER, vlr VARCHAR2(20))
> > > > >
> > > > > INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/
> > > > > INSERT INTO TESTE (COD,VLR) VALUES (1,'2')/
> > > > > INSERT INTO TESTE (COD,VLR) VALUES (1,'3')/
> > > > > INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/
> > > > > INSERT INTO TESTE (COD,VLR) VALUES (2,'3')/
> > > > > INSERT INTO TESTE (COD,VLR) VALUES (2,'4')/
> > > > >
> > > > > Pesquisar o documento que tenha as palavras *1 e 3.*
> > > > >
> > > > > 1)
> > > > > SELECT COD,VLR FROM ARQ.TESTE
> > > > > WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
> > > > > > No results.
> > > > >
> > > > > 2)
> > > > > SELECT COD,VLR FROM ARQ.TESTE
> > > > > WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
> > > > > >
> > > > > 1 1
> > > > > 1 3
> > > > > 2 3
> > > > >
> > > > > (Resultado igual ao IN)
> > > > >
> > > > > Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.
> > > > >
> > > > > Valeu, pela ajuda
> > > > > Vou tentar outra cois

Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico Pablo Câmara
Isso, com o exists funciona...

Mas só por curiosidad, como funcional o =ALL nesse caso?

Pablo





2009/7/31 jlchiappa 

>
>
> Colega, o exemplo que vc deu é TOTALMENTE diferente do que assumi no começo
> da thread : nesse que vc deu agora vc tem, EM REGISTROS DIFERENTES, colunas
> com o valor 3 e colunas com o valor 1 : tudo o que eu tinha dito é se os
> vários valores estivessem na ** MESMA ** ocorrencia da ** MESMA ** coluna no
> MESMO registro, sendo registros diferentes muda COMPLETAMENTE de figura, aí
> sim tente com algum tipo de sub-query, procvavelmente EXISTS...
>
> []s
>
> Chiappa
>
> --- Em oracle_br@yahoogrupos.com.br ,
> Pablo Câmara  escreveu
>
> >
> > Gostaria que viesse o resultado: cod = 1 (apenas)
> > Já que o cod 1 possui tanto o vlr 1 e o vlr 3
> >
> >
> >
> >
> > 2009/7/31 jlchiappa 
> >
> > >
> > >
> > > Não, colega, não : ** releia ** a minha msg, eu disse :
> > >
> > > coluna like p1 AND coluna like p2 AND coluna like p3
> > >
> > > é AND pra que obedeça a todas as condições, e não OR, yes ???
> > >
> > > []s
> > >
> > > Chiapa
> > >
> > > --- Em oracle_br@yahoogrupos.com.br 
> > >  40yahoogrupos.com.br>,
> > > Pablo Câmara  escreveu
> > > >
> > > > Chiappa,
> > > > Valeu pela ajuda...mas não conseguí.
> > > > A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%' and
> > > COLUNA
> > > > like '%param3%'
> > > > No meu caso não funcionou.
> > > >
> > > > No meu exemplo:
> > > >
> > > > CREATE TABLE arq.teste (cod NUMBER, vlr VARCHAR2(20))
> > > >
> > > > INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/
> > > > INSERT INTO TESTE (COD,VLR) VALUES (1,'2')/
> > > > INSERT INTO TESTE (COD,VLR) VALUES (1,'3')/
> > > > INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/
> > > > INSERT INTO TESTE (COD,VLR) VALUES (2,'3')/
> > > > INSERT INTO TESTE (COD,VLR) VALUES (2,'4')/
> > > >
> > > > Pesquisar o documento que tenha as palavras *1 e 3.*
> > > >
> > > > 1)
> > > > SELECT COD,VLR FROM ARQ.TESTE
> > > > WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
> > > > > No results.
> > > >
> > > > 2)
> > > > SELECT COD,VLR FROM ARQ.TESTE
> > > > WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
> > > > >
> > > > 1 1
> > > > 1 3
> > > > 2 3
> > > >
> > > > (Resultado igual ao IN)
> > > >
> > > > Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.
> > > >
> > > > Valeu, pela ajuda
> > > > Vou tentar outra coisa aqui!
> > > >
> > > >
> > > >
> > > > 2009/7/31 jlchiappa 
> > >
> > > >
> > > > >
> > > > >
> > > > > Colega, vamos por partes aí : primeiro de tudo, vamos entender : o
> > > WHERE é
> > > > > uma cláusula aplicada a CADA REGISTRO, um por vez, para filtragem,
> e o
> > > > > operador ALL indica que a condição deve ser verdadeira para TODOS
> os
> > > valores
> > > > > - sabendo-se isso, uma condição
> > > > >
> > > > > WHERE coluna = ALL (x, y, z)
> > > > >
> > > > > evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de
> uma
> > > coluna
> > > > > NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc
> obteve
> > > "No
> > > > > Results" na sua primeira tentativa... O que vc quer é pesquisar NÂO
> por
> > > > > Igualdade, mas por presença, então esqueça o '=' , blz ? No banco
> 8i,
> > > já que
> > > > > vc não tem a REGEXPe iirc não tem Contexts também, as únicas opções
> pra
> > > se
> > > > > pesquisar por existência de uma substring dentro de outra são : o
> LIKE,
> > > as
> > > > > funções string tipo INSTR, escrita de uma função PL/SQL customizada
> sua
> > > ou
> > > > > alguma combinação complexa com Analytics (estes já existiam no 8i,
> só
> > > não
> > > > > lembro o release 8i exato em que foram introduzidos).
> > > > > Para usar o LIKE ou funções built-in, isso VAI implicar em SQL
> > > dinâmico,
> > > > > imagino que vc terá que ter uma rotina sua, que recebe os
> parâmetros
> > > > > digitados e os expande em vários LIKE, tipo :
> > > > >
> > > > > WHERE coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA
> like
> > > > > '%param3%'
> > > > >
> > > > > ou com built-ins se quiser, algo assim..
> > > > >
> > > > > A opção de função customizada sua seria algo que vc chamaria no
> WHERE,
> > > tipo
> > > > > :
> > > > >
> > > > > WHERE minha_função(coluna, paramdebusca1, paramdebusca2, paramde
> > > busca3) =
> > > > > 1 ...
> > > > >
> > > > > lógico, NENHUMA dessas alternativas vão ser extremamente saudável
> pra
> > > > > performance, mas é isso... A menos danosa imagino que seria montar
> > > alguma
> > > > > combinação com Analytics, mas e algo a se pesquisar...
> > > > >
> > > > > []s
> > > > >
> > > > > Chiappa
> > > > > --- Em 
> > > > > oracle_br@yahoogrupos.com.br 40yahoogrupos.com.br> > > 40yahoogrupos.com.br>,
> > > > > Pablo Câmara  escreveu
> > > > > >
> > > > > > *paramentroDaTela := BABCOCK DIGIMAPAS TUBO*
> > > > >
> > > > > > *
> > > > > > *
> > > > > > *1) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> > > > > TXT_DOCUMENTO
> > > > > > IN (paramentroDaTela)*
> > > > > > *
> > > > > > *
> > > > > > *No caso 1: vai retorna

Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico Pablo Câmara
Valeu a todos!


2009/7/31 Pablo Câmara 

> Flaviano, acho que é exatamente isso!
> select distinct cod from teste t1
> where exists (select * from teste t2 where t2.cod = t1.cod and   t2.vlr =
> '3')
> and   exists (select * from teste t2 where t2.cod = t1.cod and   t2.vlr =
> '1')
>
> Obrigado!
>
>
>
> 2009/7/31 Flaviano, Wellington (GE Money) 
>
>
>>
>> Utiliza o exists, where exits coluna = 1 ... And exists coluna =3 ...
>> Acredito que funciona...
>>
>> -Original Message-
>> From: oracle_br@yahoogrupos.com.br [mailto:
>> oracle_br@yahoogrupos.com.br ] On Behalf
>> Of Pablo Câmara
>> Sent: Friday, July 31, 2009 3:07 PM
>> To: oracle_br@yahoogrupos.com.br 
>> Subject: Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)
>>
>> Gostaria que viesse o resultado: cod = 1 (apenas) Já que o cod 1 possui
>> tanto o vlr 1 e o vlr 3
>>
>> 2009/7/31 jlchiappa >
>>
>> >
>> >
>> > Não, colega, não : ** releia ** a minha msg, eu disse :
>> >
>> > coluna like p1 AND coluna like p2 AND coluna like p3
>> >
>> > é AND pra que obedeça a todas as condições, e não OR, yes ???
>> >
>> > []s
>> >
>> > Chiapa
>> >
>> > --- Em oracle_br@yahoogrupos.com.br 
>> > > 40yahoogrupos.com.br>,
>> > Pablo Câmara  escreveu
>> > >
>> > > Chiappa,
>> > > Valeu pela ajuda...mas não conseguí.
>> > > A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%'
>> > > and
>> > COLUNA
>> > > like '%param3%'
>> > > No meu caso não funcionou.
>> > >
>> > > No meu exemplo:
>> > >
>> > > CREATE TABLE arq.teste (cod NUMBER, vlr VARCHAR2(20))
>> > >
>> > > INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/ INSERT INTO TESTE
>> > > (COD,VLR) VALUES (1,'2')/ INSERT INTO TESTE (COD,VLR) VALUES
>> > > (1,'3')/ INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/ INSERT INTO
>> > > TESTE (COD,VLR) VALUES (2,'3')/ INSERT INTO TESTE (COD,VLR) VALUES
>> > > (2,'4')/
>> > >
>> > > Pesquisar o documento que tenha as palavras *1 e 3.*
>> > >
>> > > 1)
>> > > SELECT COD,VLR FROM ARQ.TESTE
>> > > WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
>> > > > No results.
>> > >
>> > > 2)
>> > > SELECT COD,VLR FROM ARQ.TESTE
>> > > WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
>> > > >
>> > > 1 1
>> > > 1 3
>> > > 2 3
>> > >
>> > > (Resultado igual ao IN)
>> > >
>> > > Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.
>> > >
>> > > Valeu, pela ajuda
>> > > Vou tentar outra coisa aqui!
>> > >
>> > >
>> > >
>> > > 2009/7/31 jlchiappa 
>> >
>> > >
>> > > >
>> > > >
>> > > > Colega, vamos por partes aí : primeiro de tudo, vamos entender : o
>> > WHERE é
>> > > > uma cláusula aplicada a CADA REGISTRO, um por vez, para filtragem,
>> > > > e o operador ALL indica que a condição deve ser verdadeira para
>> > > > TODOS os
>> > valores
>> > > > - sabendo-se isso, uma condição
>> > > >
>> > > > WHERE coluna = ALL (x, y, z)
>> > > >
>> > > > evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de
>> > > > uma
>> > coluna
>> > > > NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc
>> > > > obteve
>> > "No
>> > > > Results" na sua primeira tentativa... O que vc quer é pesquisar
>> > > > NÂO por Igualdade, mas por presença, então esqueça o '=' , blz ?
>> > > > No banco 8i,
>> > já que
>> > > > vc não tem a REGEXPe iirc não tem Contexts também, as únicas
>> > > > opções pra
>> > se
>> > > > pesquisar por existência de uma substring dentro de outra são : o
>> > > > LIKE,
>> > as
>> > > > funções string tipo INSTR, escrita de uma função PL/SQL
>> > > > customizada sua
>> > ou
>> > > > alguma combinação complexa com Analytics (estes já existiam no 8i,
>>

[oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico jlchiappa
Colega, o exemplo que vc deu é TOTALMENTE diferente do que assumi no começo da 
thread : nesse que vc deu agora vc tem, EM REGISTROS DIFERENTES, colunas com o 
valor 3 e colunas com o valor 1 : tudo o que eu tinha dito é se os vários 
valores estivessem na ** MESMA ** ocorrencia da ** MESMA ** coluna no MESMO 
registro, sendo registros diferentes muda COMPLETAMENTE de figura, aí sim tente 
com algum tipo de sub-query, procvavelmente EXISTS...

 []s
 
  Chiappa
  
--- Em oracle_br@yahoogrupos.com.br, Pablo Câmara  escreveu
>
> Gostaria que viesse o resultado: cod = 1 (apenas)
> Já que o cod 1 possui tanto o vlr 1 e o vlr 3
> 
> 
> 
> 
> 2009/7/31 jlchiappa 
> 
> >
> >
> > Não, colega, não : ** releia ** a minha msg, eu disse :
> >
> > coluna like p1 AND coluna like p2 AND coluna like p3
> >
> > é AND pra que obedeça a todas as condições, e não OR, yes ???
> >
> > []s
> >
> > Chiapa
> >
> > --- Em oracle_br@yahoogrupos.com.br ,
> > Pablo Câmara  escreveu
> > >
> > > Chiappa,
> > > Valeu pela ajuda...mas não conseguí.
> > > A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%' and
> > COLUNA
> > > like '%param3%'
> > > No meu caso não funcionou.
> > >
> > > No meu exemplo:
> > >
> > > CREATE TABLE arq.teste (cod NUMBER, vlr VARCHAR2(20))
> > >
> > > INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/
> > > INSERT INTO TESTE (COD,VLR) VALUES (1,'2')/
> > > INSERT INTO TESTE (COD,VLR) VALUES (1,'3')/
> > > INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/
> > > INSERT INTO TESTE (COD,VLR) VALUES (2,'3')/
> > > INSERT INTO TESTE (COD,VLR) VALUES (2,'4')/
> > >
> > > Pesquisar o documento que tenha as palavras *1 e 3.*
> > >
> > > 1)
> > > SELECT COD,VLR FROM ARQ.TESTE
> > > WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
> > > > No results.
> > >
> > > 2)
> > > SELECT COD,VLR FROM ARQ.TESTE
> > > WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
> > > >
> > > 1 1
> > > 1 3
> > > 2 3
> > >
> > > (Resultado igual ao IN)
> > >
> > > Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.
> > >
> > > Valeu, pela ajuda
> > > Vou tentar outra coisa aqui!
> > >
> > >
> > >
> > > 2009/7/31 jlchiappa 
> >
> > >
> > > >
> > > >
> > > > Colega, vamos por partes aí : primeiro de tudo, vamos entender : o
> > WHERE é
> > > > uma cláusula aplicada a CADA REGISTRO, um por vez, para filtragem, e o
> > > > operador ALL indica que a condição deve ser verdadeira para TODOS os
> > valores
> > > > - sabendo-se isso, uma condição
> > > >
> > > > WHERE coluna = ALL (x, y, z)
> > > >
> > > > evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de uma
> > coluna
> > > > NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc obteve
> > "No
> > > > Results" na sua primeira tentativa... O que vc quer é pesquisar NÂO por
> > > > Igualdade, mas por presença, então esqueça o '=' , blz ? No banco 8i,
> > já que
> > > > vc não tem a REGEXPe iirc não tem Contexts também, as únicas opções pra
> > se
> > > > pesquisar por existência de uma substring dentro de outra são : o LIKE,
> > as
> > > > funções string tipo INSTR, escrita de uma função PL/SQL customizada sua
> > ou
> > > > alguma combinação complexa com Analytics (estes já existiam no 8i, só
> > não
> > > > lembro o release 8i exato em que foram introduzidos).
> > > > Para usar o LIKE ou funções built-in, isso VAI implicar em SQL
> > dinâmico,
> > > > imagino que vc terá que ter uma rotina sua, que recebe os parâmetros
> > > > digitados e os expande em vários LIKE, tipo :
> > > >
> > > > WHERE coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA like
> > > > '%param3%'
> > > >
> > > > ou com built-ins se quiser, algo assim..
> > > >
> > > > A opção de função customizada sua seria algo que vc chamaria no WHERE,
> > tipo
> > > > :
> > > >
> > > > WHERE minha_função(coluna, paramdebusca1, paramdebusca2, paramde
> > busca3) =
> > > > 1 ...
> > > >
> > > > lógico, NENHUMA dessas alternativas vão ser extremamente saudável pra
> > > > performance, mas é isso... A menos danosa imagino que seria montar
> > alguma
> > > > combinação com Analytics, mas e algo a se pesquisar...
> > > >
> > > > []s
> > > >
> > > > Chiappa
> > > > --- Em oracle_br@yahoogrupos.com.br 
> > > >  > 40yahoogrupos.com.br>,
> > > > Pablo Câmara  escreveu
> > > > >
> > > > > *paramentroDaTela := BABCOCK DIGIMAPAS TUBO*
> > > >
> > > > > *
> > > > > *
> > > > > *1) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> > > > TXT_DOCUMENTO
> > > > > IN (paramentroDaTela)*
> > > > > *
> > > > > *
> > > > > *No caso 1: vai retornar o código de varios documentos. Sendo uma
> > tabela
> > > > > de 3 milhoes de registros. Fica inviável.*
> > > > > *
> > > > > *
> > > > > *2) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> > > > TXT_DOCUMENTO
> > > > > =ALL (paramentroDaTela)*
> > > > > *
> > > > > *
> > > > > *No caso 2: Se o comando funcionasse, traria apenas o código do
> > > > documento,
> > > > > no qual todas as palavras passadas como paramentro fazem parte.*
> > > > > *
> > > > > *
> > > > > *A

Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico Pablo Câmara
Flaviano, acho que é exatamente isso!
select distinct cod from teste t1
where exists (select * from teste t2 where t2.cod = t1.cod and   t2.vlr =
'3')
and   exists (select * from teste t2 where t2.cod = t1.cod and   t2.vlr =
'1')

Obrigado!



2009/7/31 Flaviano, Wellington (GE Money) 

>
>
> Utiliza o exists, where exits coluna = 1 ... And exists coluna =3 ...
> Acredito que funciona...
>
> -Original Message-
> From: oracle_br@yahoogrupos.com.br [mailto:
> oracle_br@yahoogrupos.com.br ] On Behalf
> Of Pablo Câmara
> Sent: Friday, July 31, 2009 3:07 PM
> To: oracle_br@yahoogrupos.com.br 
> Subject: Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)
>
> Gostaria que viesse o resultado: cod = 1 (apenas) Já que o cod 1 possui
> tanto o vlr 1 e o vlr 3
>
> 2009/7/31 jlchiappa >
>
> >
> >
> > Não, colega, não : ** releia ** a minha msg, eu disse :
> >
> > coluna like p1 AND coluna like p2 AND coluna like p3
> >
> > é AND pra que obedeça a todas as condições, e não OR, yes ???
> >
> > []s
> >
> > Chiapa
> >
> > --- Em oracle_br@yahoogrupos.com.br 
> >  40yahoogrupos.com.br>,
> > Pablo Câmara  escreveu
> > >
> > > Chiappa,
> > > Valeu pela ajuda...mas não conseguí.
> > > A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%'
> > > and
> > COLUNA
> > > like '%param3%'
> > > No meu caso não funcionou.
> > >
> > > No meu exemplo:
> > >
> > > CREATE TABLE arq.teste (cod NUMBER, vlr VARCHAR2(20))
> > >
> > > INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/ INSERT INTO TESTE
> > > (COD,VLR) VALUES (1,'2')/ INSERT INTO TESTE (COD,VLR) VALUES
> > > (1,'3')/ INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/ INSERT INTO
> > > TESTE (COD,VLR) VALUES (2,'3')/ INSERT INTO TESTE (COD,VLR) VALUES
> > > (2,'4')/
> > >
> > > Pesquisar o documento que tenha as palavras *1 e 3.*
> > >
> > > 1)
> > > SELECT COD,VLR FROM ARQ.TESTE
> > > WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
> > > > No results.
> > >
> > > 2)
> > > SELECT COD,VLR FROM ARQ.TESTE
> > > WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
> > > >
> > > 1 1
> > > 1 3
> > > 2 3
> > >
> > > (Resultado igual ao IN)
> > >
> > > Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.
> > >
> > > Valeu, pela ajuda
> > > Vou tentar outra coisa aqui!
> > >
> > >
> > >
> > > 2009/7/31 jlchiappa 
> >
> > >
> > > >
> > > >
> > > > Colega, vamos por partes aí : primeiro de tudo, vamos entender : o
> > WHERE é
> > > > uma cláusula aplicada a CADA REGISTRO, um por vez, para filtragem,
> > > > e o operador ALL indica que a condição deve ser verdadeira para
> > > > TODOS os
> > valores
> > > > - sabendo-se isso, uma condição
> > > >
> > > > WHERE coluna = ALL (x, y, z)
> > > >
> > > > evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de
> > > > uma
> > coluna
> > > > NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc
> > > > obteve
> > "No
> > > > Results" na sua primeira tentativa... O que vc quer é pesquisar
> > > > NÂO por Igualdade, mas por presença, então esqueça o '=' , blz ?
> > > > No banco 8i,
> > já que
> > > > vc não tem a REGEXPe iirc não tem Contexts também, as únicas
> > > > opções pra
> > se
> > > > pesquisar por existência de uma substring dentro de outra são : o
> > > > LIKE,
> > as
> > > > funções string tipo INSTR, escrita de uma função PL/SQL
> > > > customizada sua
> > ou
> > > > alguma combinação complexa com Analytics (estes já existiam no 8i,
> > > > só
> > não
> > > > lembro o release 8i exato em que foram introduzidos).
> > > > Para usar o LIKE ou funções built-in, isso VAI implicar em SQL
> > dinâmico,
> > > > imagino que vc terá que ter uma rotina sua, que recebe os
> > > > parâmetros digitados e os expande em vários LIKE, tipo :
> > > >
> > > > WHERE coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA
> > > > like '%param3%'
>

RE: [oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico Flaviano, Wellington (GE Money)
Utiliza o exists, where exits coluna = 1 ... And exists coluna =3 ... Acredito 
que funciona... 



-Original Message-
From: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] On 
Behalf Of Pablo Câmara
Sent: Friday, July 31, 2009 3:07 PM
To: oracle_br@yahoogrupos.com.br
Subject: Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)

Gostaria que viesse o resultado: cod = 1 (apenas) Já que o cod 1 possui tanto o 
vlr 1 e o vlr 3




2009/7/31 jlchiappa 

>
>
> Não, colega, não : ** releia ** a minha msg, eu disse :
>
> coluna like p1 AND coluna like p2 AND coluna like p3
>
> é AND pra que obedeça a todas as condições, e não OR, yes ???
>
> []s
>
> Chiapa
>
> --- Em oracle_br@yahoogrupos.com.br , 
> Pablo Câmara  escreveu
> >
> > Chiappa,
> > Valeu pela ajuda...mas não conseguí.
> > A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%' 
> > and
> COLUNA
> > like '%param3%'
> > No meu caso não funcionou.
> >
> > No meu exemplo:
> >
> > CREATE TABLE arq.teste (cod NUMBER, vlr VARCHAR2(20))
> >
> > INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/ INSERT INTO TESTE 
> > (COD,VLR) VALUES (1,'2')/ INSERT INTO TESTE (COD,VLR) VALUES 
> > (1,'3')/ INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/ INSERT INTO 
> > TESTE (COD,VLR) VALUES (2,'3')/ INSERT INTO TESTE (COD,VLR) VALUES 
> > (2,'4')/
> >
> > Pesquisar o documento que tenha as palavras *1 e 3.*
> >
> > 1)
> > SELECT COD,VLR FROM ARQ.TESTE
> > WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
> > > No results.
> >
> > 2)
> > SELECT COD,VLR FROM ARQ.TESTE
> > WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
> > >
> > 1 1
> > 1 3
> > 2 3
> >
> > (Resultado igual ao IN)
> >
> > Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.
> >
> > Valeu, pela ajuda
> > Vou tentar outra coisa aqui!
> >
> >
> >
> > 2009/7/31 jlchiappa 
>
> >
> > >
> > >
> > > Colega, vamos por partes aí : primeiro de tudo, vamos entender : o
> WHERE é
> > > uma cláusula aplicada a CADA REGISTRO, um por vez, para filtragem, 
> > > e o operador ALL indica que a condição deve ser verdadeira para 
> > > TODOS os
> valores
> > > - sabendo-se isso, uma condição
> > >
> > > WHERE coluna = ALL (x, y, z)
> > >
> > > evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de 
> > > uma
> coluna
> > > NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc 
> > > obteve
> "No
> > > Results" na sua primeira tentativa... O que vc quer é pesquisar 
> > > NÂO por Igualdade, mas por presença, então esqueça o '=' , blz ? 
> > > No banco 8i,
> já que
> > > vc não tem a REGEXPe iirc não tem Contexts também, as únicas 
> > > opções pra
> se
> > > pesquisar por existência de uma substring dentro de outra são : o 
> > > LIKE,
> as
> > > funções string tipo INSTR, escrita de uma função PL/SQL 
> > > customizada sua
> ou
> > > alguma combinação complexa com Analytics (estes já existiam no 8i, 
> > > só
> não
> > > lembro o release 8i exato em que foram introduzidos).
> > > Para usar o LIKE ou funções built-in, isso VAI implicar em SQL
> dinâmico,
> > > imagino que vc terá que ter uma rotina sua, que recebe os 
> > > parâmetros digitados e os expande em vários LIKE, tipo :
> > >
> > > WHERE coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA 
> > > like '%param3%'
> > >
> > > ou com built-ins se quiser, algo assim..
> > >
> > > A opção de função customizada sua seria algo que vc chamaria no 
> > > WHERE,
> tipo
> > > :
> > >
> > > WHERE minha_função(coluna, paramdebusca1, paramdebusca2, paramde
> busca3) =
> > > 1 ...
> > >
> > > lógico, NENHUMA dessas alternativas vão ser extremamente saudável 
> > > pra performance, mas é isso... A menos danosa imagino que seria 
> > > montar
> alguma
> > > combinação com Analytics, mas e algo a se pesquisar...
> > >
> > > []s
> > >
> > > Chiappa
> > > --- Em oracle_br@yahoogrupos.com.br 
> > >  40yahoogrupos.com.br>,
> > > Pablo Câmara  escreveu
> > > >
> > > > *paramentroDaTela := BABCOCK DIGIMAPAS TUB

Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico Milton Bastos
Pablo

Eu "subentendi" que vc quer
apenas os registros que tenham
COD = 1 e VLR = 3, é isso que vc quis dizer
com "valores 1 e 3"??

Se for, vc escreveu errado seu select:

1)
SELECT COD,VLR FROM ARQ.TESTE
WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
> No results.


Vc colocou o campo VLR DUAS vezes...
troque um dos VLR por COD.

Do jeito que vc escreveu nunca vai retornar NADA,
afinal, o mesmo campo (VLR) nunca vai ter AO MESMO TEMPO
dois valores diferentes (1 e 3).



 
 
---Original Message---
 
From: Pablo Câmara
Date: 31/7/2009 14:09:57
To: oracle_br@yahoogrupos.com.br
Subject: Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)
 
  Chiappa,
Valeu pela ajuda...mas não conseguí.
A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA
like '%param3%'
No meu caso não funcionou.

No meu exemplo:

CREATE TABLE arq.teste (cod NUMBER, vlr VARCHAR2(20))

INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/
INSERT INTO TESTE (COD,VLR) VALUES (1,'2')/
INSERT INTO TESTE (COD,VLR) VALUES (1,'3')/
INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/
INSERT INTO TESTE (COD,VLR) VALUES (2,'3')/
INSERT INTO TESTE (COD,VLR) VALUES (2,'4')/

Pesquisar o documento que tenha as palavras *1 e 3.*

1)
SELECT COD,VLR FROM ARQ.TESTE
WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
> No results.

2)
SELECT COD,VLR FROM ARQ.TESTE
WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
>
1 1
1 3
2 3

(Resultado igual ao IN)

Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.

Valeu, pela ajuda
Vou tentar outra coisa aqui!

2009/7/31 jlchiappa 

>
>
> Colega, vamos por partes aí : primeiro de tudo, vamos entender : o WHERE é
> uma cláusula aplicada a CADA REGISTRO, um por vez, para filtragem, e o
> operador ALL indica que a condição deve ser verdadeira para TODOS os
valores
> - sabendo-se isso, uma condição
>
> WHERE coluna = ALL (x, y, z)
>
> evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de uma
coluna
> NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc obteve 
No
> Results" na sua primeira tentativa... O que vc quer é pesquisar NÂO por
> Igualdade, mas por presença, então esqueça o '=' , blz ? No banco 8i, já
que
> vc não tem a REGEXPe iirc não tem Contexts também, as únicas opções pra se
> pesquisar por existência de uma substring dentro de outra são : o LIKE, as
> funções string tipo INSTR, escrita de uma função PL/SQL customizada sua ou
> alguma combinação complexa com Analytics (estes já existiam no 8i, só não
> lembro o release 8i exato em que foram introduzidos).
> Para usar o LIKE ou funções built-in, isso VAI implicar em SQL dinâmico,
> imagino que vc terá que ter uma rotina sua, que recebe os parâmetros
> digitados e os expande em vários LIKE, tipo :
>
> WHERE coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA like
> '%param3%'
>
> ou com built-ins se quiser, algo assim..
>
> A opção de função customizada sua seria algo que vc chamaria no WHERE,
tipo
> :
>
> WHERE minha_função(coluna, paramdebusca1, paramdebusca2, paramde busca3) =
> 1 ...
>
> lógico, NENHUMA dessas alternativas vão ser extremamente saudável pra
> performance, mas é isso... A menos danosa imagino que seria montar alguma
> combinação com Analytics, mas e algo a se pesquisar...
>
> []s
>
> Chiappa
> --- Em oracle_br@yahoogrupos.com.br ,
> Pablo Câmara  escreveu
> >
> > *paramentroDaTela := BABCOCK DIGIMAPAS TUBO*
>
> > *
> > *
> > *1) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> TXT_DOCUMENTO
> > IN (paramentroDaTela)*
> > *
> > *
> > *No caso 1: vai retornar o código de varios documentos. Sendo uma tabela
> > de 3 milhoes de registros. Fica inviável.*
> > *
> > *
> > *2) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> TXT_DOCUMENTO
> > =ALL (paramentroDaTela)*
> > *
> > *
> > *No caso 2: Se o comando funcionasse, traria apenas o código do
> documento,
> > no qual todas as palavras passadas como paramentro fazem parte.*
> > *
> > *
> > *Alguem tem alguma outra sugestão? PS: ORACLE 8I.*
> > *
> > *
> > *Em outras versões do oracle (a partir do 9i) eu utilizo o regexp_like.
> Ou
> > faço a busca por contexto.*
> > *
> > *
> > *Pablo*
> > *
> > *
> > *
> > *
> > *
> > *
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>
> 
>

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



 

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



Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico Pablo Câmara
Gostaria que viesse o resultado: cod = 1 (apenas)
Já que o cod 1 possui tanto o vlr 1 e o vlr 3




2009/7/31 jlchiappa 

>
>
> Não, colega, não : ** releia ** a minha msg, eu disse :
>
> coluna like p1 AND coluna like p2 AND coluna like p3
>
> é AND pra que obedeça a todas as condições, e não OR, yes ???
>
> []s
>
> Chiapa
>
> --- Em oracle_br@yahoogrupos.com.br ,
> Pablo Câmara  escreveu
> >
> > Chiappa,
> > Valeu pela ajuda...mas não conseguí.
> > A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%' and
> COLUNA
> > like '%param3%'
> > No meu caso não funcionou.
> >
> > No meu exemplo:
> >
> > CREATE TABLE arq.teste (cod NUMBER, vlr VARCHAR2(20))
> >
> > INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/
> > INSERT INTO TESTE (COD,VLR) VALUES (1,'2')/
> > INSERT INTO TESTE (COD,VLR) VALUES (1,'3')/
> > INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/
> > INSERT INTO TESTE (COD,VLR) VALUES (2,'3')/
> > INSERT INTO TESTE (COD,VLR) VALUES (2,'4')/
> >
> > Pesquisar o documento que tenha as palavras *1 e 3.*
> >
> > 1)
> > SELECT COD,VLR FROM ARQ.TESTE
> > WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
> > > No results.
> >
> > 2)
> > SELECT COD,VLR FROM ARQ.TESTE
> > WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
> > >
> > 1 1
> > 1 3
> > 2 3
> >
> > (Resultado igual ao IN)
> >
> > Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.
> >
> > Valeu, pela ajuda
> > Vou tentar outra coisa aqui!
> >
> >
> >
> > 2009/7/31 jlchiappa 
>
> >
> > >
> > >
> > > Colega, vamos por partes aí : primeiro de tudo, vamos entender : o
> WHERE é
> > > uma cláusula aplicada a CADA REGISTRO, um por vez, para filtragem, e o
> > > operador ALL indica que a condição deve ser verdadeira para TODOS os
> valores
> > > - sabendo-se isso, uma condição
> > >
> > > WHERE coluna = ALL (x, y, z)
> > >
> > > evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de uma
> coluna
> > > NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc obteve
> "No
> > > Results" na sua primeira tentativa... O que vc quer é pesquisar NÂO por
> > > Igualdade, mas por presença, então esqueça o '=' , blz ? No banco 8i,
> já que
> > > vc não tem a REGEXPe iirc não tem Contexts também, as únicas opções pra
> se
> > > pesquisar por existência de uma substring dentro de outra são : o LIKE,
> as
> > > funções string tipo INSTR, escrita de uma função PL/SQL customizada sua
> ou
> > > alguma combinação complexa com Analytics (estes já existiam no 8i, só
> não
> > > lembro o release 8i exato em que foram introduzidos).
> > > Para usar o LIKE ou funções built-in, isso VAI implicar em SQL
> dinâmico,
> > > imagino que vc terá que ter uma rotina sua, que recebe os parâmetros
> > > digitados e os expande em vários LIKE, tipo :
> > >
> > > WHERE coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA like
> > > '%param3%'
> > >
> > > ou com built-ins se quiser, algo assim..
> > >
> > > A opção de função customizada sua seria algo que vc chamaria no WHERE,
> tipo
> > > :
> > >
> > > WHERE minha_função(coluna, paramdebusca1, paramdebusca2, paramde
> busca3) =
> > > 1 ...
> > >
> > > lógico, NENHUMA dessas alternativas vão ser extremamente saudável pra
> > > performance, mas é isso... A menos danosa imagino que seria montar
> alguma
> > > combinação com Analytics, mas e algo a se pesquisar...
> > >
> > > []s
> > >
> > > Chiappa
> > > --- Em oracle_br@yahoogrupos.com.br 
> > >  40yahoogrupos.com.br>,
> > > Pablo Câmara  escreveu
> > > >
> > > > *paramentroDaTela := BABCOCK DIGIMAPAS TUBO*
> > >
> > > > *
> > > > *
> > > > *1) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> > > TXT_DOCUMENTO
> > > > IN (paramentroDaTela)*
> > > > *
> > > > *
> > > > *No caso 1: vai retornar o código de varios documentos. Sendo uma
> tabela
> > > > de 3 milhoes de registros. Fica inviável.*
> > > > *
> > > > *
> > > > *2) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> > > TXT_DOCUMENTO
> > > > =ALL (paramentroDaTela)*
> > > > *
> > > > *
> > > > *No caso 2: Se o comando funcionasse, traria apenas o código do
> > > documento,
> > > > no qual todas as palavras passadas como paramentro fazem parte.*
> > > > *
> > > > *
> > > > *Alguem tem alguma outra sugestão? PS: ORACLE 8I.*
> > > > *
> > > > *
> > > > *Em outras versões do oracle (a partir do 9i) eu utilizo o
> regexp_like.
> > > Ou
> > > > faço a busca por contexto.*
> > > > *
> > > > *
> > > > *Pablo*
> > > > *
> > > > *
> > > > *
> > > > *
> > > > *
> > > > *
> > > >
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > >
> > >
> > >
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>
>  
>


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



[oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico jlchiappa
Não, colega, não : ** releia ** a minha msg, eu disse :

coluna like p1 AND coluna like p2 AND coluna like p3

é AND pra que obedeça a todas as condições, e não OR, yes ???

 []s

 Chiapa
--- Em oracle_br@yahoogrupos.com.br, Pablo Câmara  escreveu
>
> Chiappa,
> Valeu pela ajuda...mas não conseguí.
> A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA
> like '%param3%'
> No meu caso não funcionou.
> 
> No meu exemplo:
> 
> CREATE TABLE arq.teste (cod NUMBER, vlr  VARCHAR2(20))
> 
> INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/
> INSERT INTO TESTE (COD,VLR) VALUES (1,'2')/
> INSERT INTO TESTE (COD,VLR) VALUES (1,'3')/
> INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/
> INSERT INTO TESTE (COD,VLR) VALUES (2,'3')/
> INSERT INTO TESTE (COD,VLR) VALUES (2,'4')/
> 
> Pesquisar o documento que tenha as palavras *1 e 3.*
> 
> 1)
>  SELECT COD,VLR FROM ARQ.TESTE
>  WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
>  > No results.
> 
> 2)
>  SELECT COD,VLR FROM ARQ.TESTE
>  WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
> >
>   1 1
>   1 3
>   2 3
> 
> (Resultado igual ao IN)
> 
> Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.
> 
> Valeu, pela ajuda
> Vou tentar outra coisa aqui!
> 
> 
> 
> 2009/7/31 jlchiappa 
> 
> >
> >
> > Colega, vamos por partes aí : primeiro de tudo, vamos entender : o WHERE é
> > uma cláusula aplicada a CADA REGISTRO, um por vez, para filtragem, e o
> > operador ALL indica que a condição deve ser verdadeira para TODOS os valores
> > - sabendo-se isso, uma condição
> >
> > WHERE coluna = ALL (x, y, z)
> >
> > evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de uma coluna
> > NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc obteve "No
> > Results" na sua primeira tentativa... O que vc quer é pesquisar NÂO por
> > Igualdade, mas por presença, então esqueça o '=' , blz ? No banco 8i, já que
> > vc não tem a REGEXPe iirc não tem Contexts também, as únicas opções pra se
> > pesquisar por existência de uma substring dentro de outra são : o LIKE, as
> > funções string tipo INSTR, escrita de uma função PL/SQL customizada sua ou
> > alguma combinação complexa com Analytics (estes já existiam no 8i, só não
> > lembro o release 8i exato em que foram introduzidos).
> > Para usar o LIKE ou funções built-in, isso VAI implicar em SQL dinâmico,
> > imagino que vc terá que ter uma rotina sua, que recebe os parâmetros
> > digitados e os expande em vários LIKE, tipo :
> >
> > WHERE coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA like
> > '%param3%'
> >
> > ou com built-ins se quiser, algo assim..
> >
> > A opção de função customizada sua seria algo que vc chamaria no WHERE, tipo
> > :
> >
> > WHERE minha_função(coluna, paramdebusca1, paramdebusca2, paramde busca3) =
> > 1 ...
> >
> > lógico, NENHUMA dessas alternativas vão ser extremamente saudável pra
> > performance, mas é isso... A menos danosa imagino que seria montar alguma
> > combinação com Analytics, mas e algo a se pesquisar...
> >
> > []s
> >
> > Chiappa
> > --- Em oracle_br@yahoogrupos.com.br ,
> > Pablo Câmara  escreveu
> > >
> > > *paramentroDaTela := BABCOCK DIGIMAPAS TUBO*
> >
> > > *
> > > *
> > > *1) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> > TXT_DOCUMENTO
> > > IN (paramentroDaTela)*
> > > *
> > > *
> > > *No caso 1: vai retornar o código de varios documentos. Sendo uma tabela
> > > de 3 milhoes de registros. Fica inviável.*
> > > *
> > > *
> > > *2) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> > TXT_DOCUMENTO
> > > =ALL (paramentroDaTela)*
> > > *
> > > *
> > > *No caso 2: Se o comando funcionasse, traria apenas o código do
> > documento,
> > > no qual todas as palavras passadas como paramentro fazem parte.*
> > > *
> > > *
> > > *Alguem tem alguma outra sugestão? PS: ORACLE 8I.*
> > > *
> > > *
> > > *Em outras versões do oracle (a partir do 9i) eu utilizo o regexp_like.
> > Ou
> > > faço a busca por contexto.*
> > > *
> > > *
> > > *Pablo*
> > > *
> > > *
> > > *
> > > *
> > > *
> > > *
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> >
> >  
> >
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico Gustavo Venturini de Lima
Pablo, acho que tá confundindo alguma coisa...
Vc queria valores 1 ou/e 3 em qual campo???
Pq vc fez o teste só no VLR e tá parecendo que vc quer comparar o campo COD
tb...
Se for assim, é isso mesmo, mas vc TEM que explicitar o COD tb... Tipo:
SELECT COD,VLR FROM ARQ.TESTE
WHERE ((VLR LIKE '%1%' OR VLR LIKE '%3%')
  AND (COD LIKE '%1%' OR COD LIKE '%3%'));


2009/7/31 Pablo Câmara 

>
>
> Chiappa,
> Valeu pela ajuda...mas não conseguí.
> A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%' and
> COLUNA
> like '%param3%'
> No meu caso não funcionou.
>
> No meu exemplo:
>
> CREATE TABLE arq.teste (cod NUMBER, vlr VARCHAR2(20))
>
> INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/
> INSERT INTO TESTE (COD,VLR) VALUES (1,'2')/
> INSERT INTO TESTE (COD,VLR) VALUES (1,'3')/
> INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/
> INSERT INTO TESTE (COD,VLR) VALUES (2,'3')/
> INSERT INTO TESTE (COD,VLR) VALUES (2,'4')/
>
> Pesquisar o documento que tenha as palavras *1 e 3.*
>
> 1)
> SELECT COD,VLR FROM ARQ.TESTE
> WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
> > No results.
>
> 2)
> SELECT COD,VLR FROM ARQ.TESTE
> WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
> >
> 1 1
> 1 3
> 2 3
>
> (Resultado igual ao IN)
>
> Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.
>
> Valeu, pela ajuda
> Vou tentar outra coisa aqui!
>
> 2009/7/31 jlchiappa >
>
>
> >
> >
> > Colega, vamos por partes aí : primeiro de tudo, vamos entender : o WHERE
> é
> > uma cláusula aplicada a CADA REGISTRO, um por vez, para filtragem, e o
> > operador ALL indica que a condição deve ser verdadeira para TODOS os
> valores
> > - sabendo-se isso, uma condição
> >
> > WHERE coluna = ALL (x, y, z)
> >
> > evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de uma
> coluna
> > NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc obteve
> "No
> > Results" na sua primeira tentativa... O que vc quer é pesquisar NÂO por
> > Igualdade, mas por presença, então esqueça o '=' , blz ? No banco 8i, já
> que
> > vc não tem a REGEXPe iirc não tem Contexts também, as únicas opções pra
> se
> > pesquisar por existência de uma substring dentro de outra são : o LIKE,
> as
> > funções string tipo INSTR, escrita de uma função PL/SQL customizada sua
> ou
> > alguma combinação complexa com Analytics (estes já existiam no 8i, só não
> > lembro o release 8i exato em que foram introduzidos).
> > Para usar o LIKE ou funções built-in, isso VAI implicar em SQL dinâmico,
> > imagino que vc terá que ter uma rotina sua, que recebe os parâmetros
> > digitados e os expande em vários LIKE, tipo :
> >
> > WHERE coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA like
> > '%param3%'
> >
> > ou com built-ins se quiser, algo assim..
> >
> > A opção de função customizada sua seria algo que vc chamaria no WHERE,
> tipo
> > :
> >
> > WHERE minha_função(coluna, paramdebusca1, paramdebusca2, paramde busca3)
> =
> > 1 ...
> >
> > lógico, NENHUMA dessas alternativas vão ser extremamente saudável pra
> > performance, mas é isso... A menos danosa imagino que seria montar alguma
> > combinação com Analytics, mas e algo a se pesquisar...
> >
> > []s
> >
> > Chiappa
> > --- Em oracle_br@yahoogrupos.com.br 
> >  40yahoogrupos.com.br>,
> > Pablo Câmara  escreveu
> > >
> > > *paramentroDaTela := BABCOCK DIGIMAPAS TUBO*
> >
> > > *
> > > *
> > > *1) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> > TXT_DOCUMENTO
> > > IN (paramentroDaTela)*
> > > *
> > > *
> > > *No caso 1: vai retornar o código de varios documentos. Sendo uma
> tabela
> > > de 3 milhoes de registros. Fica inviável.*
> > > *
> > > *
> > > *2) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> > TXT_DOCUMENTO
> > > =ALL (paramentroDaTela)*
> > > *
> > > *
> > > *No caso 2: Se o comando funcionasse, traria apenas o código do
> > documento,
> > > no qual todas as palavras passadas como paramentro fazem parte.*
> > > *
> > > *
> > > *Alguem tem alguma outra sugestão? PS: ORACLE 8I.*
> > > *
> > > *
> > > *Em outras versões do oracle (a partir do 9i) eu utilizo o regexp_like.
> > Ou
> > > faço a busca por contexto.*
> > > *
> > > *
> > > *Pablo*
> > > *
> > > *
> > > *
> > > *
> > > *
> > > *
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> >
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


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



Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico Pablo Câmara
Chiappa,
Valeu pela ajuda...mas não conseguí.
A solução com : coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA
like '%param3%'
No meu caso não funcionou.

No meu exemplo:

CREATE TABLE arq.teste (cod NUMBER, vlr  VARCHAR2(20))

INSERT INTO TESTE (COD,VLR) VALUES (1,'1')/
INSERT INTO TESTE (COD,VLR) VALUES (1,'2')/
INSERT INTO TESTE (COD,VLR) VALUES (1,'3')/
INSERT INTO TESTE (COD,VLR) VALUES (1,'4')/
INSERT INTO TESTE (COD,VLR) VALUES (2,'3')/
INSERT INTO TESTE (COD,VLR) VALUES (2,'4')/

Pesquisar o documento que tenha as palavras *1 e 3.*

1)
 SELECT COD,VLR FROM ARQ.TESTE
 WHERE VLR LIKE '%1%' AND VLR LIKE '%3%'
 > No results.

2)
 SELECT COD,VLR FROM ARQ.TESTE
 WHERE VLR LIKE '%1%' OR VLR LIKE '%3%'
>
  1 1
  1 3
  2 3

(Resultado igual ao IN)

Queria algo que atendende apenas aqueles que tivessem o valor 1 e 3.

Valeu, pela ajuda
Vou tentar outra coisa aqui!



2009/7/31 jlchiappa 

>
>
> Colega, vamos por partes aí : primeiro de tudo, vamos entender : o WHERE é
> uma cláusula aplicada a CADA REGISTRO, um por vez, para filtragem, e o
> operador ALL indica que a condição deve ser verdadeira para TODOS os valores
> - sabendo-se isso, uma condição
>
> WHERE coluna = ALL (x, y, z)
>
> evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de uma coluna
> NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc obteve "No
> Results" na sua primeira tentativa... O que vc quer é pesquisar NÂO por
> Igualdade, mas por presença, então esqueça o '=' , blz ? No banco 8i, já que
> vc não tem a REGEXPe iirc não tem Contexts também, as únicas opções pra se
> pesquisar por existência de uma substring dentro de outra são : o LIKE, as
> funções string tipo INSTR, escrita de uma função PL/SQL customizada sua ou
> alguma combinação complexa com Analytics (estes já existiam no 8i, só não
> lembro o release 8i exato em que foram introduzidos).
> Para usar o LIKE ou funções built-in, isso VAI implicar em SQL dinâmico,
> imagino que vc terá que ter uma rotina sua, que recebe os parâmetros
> digitados e os expande em vários LIKE, tipo :
>
> WHERE coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA like
> '%param3%'
>
> ou com built-ins se quiser, algo assim..
>
> A opção de função customizada sua seria algo que vc chamaria no WHERE, tipo
> :
>
> WHERE minha_função(coluna, paramdebusca1, paramdebusca2, paramde busca3) =
> 1 ...
>
> lógico, NENHUMA dessas alternativas vão ser extremamente saudável pra
> performance, mas é isso... A menos danosa imagino que seria montar alguma
> combinação com Analytics, mas e algo a se pesquisar...
>
> []s
>
> Chiappa
> --- Em oracle_br@yahoogrupos.com.br ,
> Pablo Câmara  escreveu
> >
> > *paramentroDaTela := BABCOCK DIGIMAPAS TUBO*
>
> > *
> > *
> > *1) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> TXT_DOCUMENTO
> > IN (paramentroDaTela)*
> > *
> > *
> > *No caso 1: vai retornar o código de varios documentos. Sendo uma tabela
> > de 3 milhoes de registros. Fica inviável.*
> > *
> > *
> > *2) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE
> TXT_DOCUMENTO
> > =ALL (paramentroDaTela)*
> > *
> > *
> > *No caso 2: Se o comando funcionasse, traria apenas o código do
> documento,
> > no qual todas as palavras passadas como paramentro fazem parte.*
> > *
> > *
> > *Alguem tem alguma outra sugestão? PS: ORACLE 8I.*
> > *
> > *
> > *Em outras versões do oracle (a partir do 9i) eu utilizo o regexp_like.
> Ou
> > faço a busca por contexto.*
> > *
> > *
> > *Pablo*
> > *
> > *
> > *
> > *
> > *
> > *
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>
>  
>


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



[oracle_br] Re: USO DO COMANDO IN (=ANY)

2009-07-31 Por tôpico jlchiappa
Colega, vamos por partes aí : primeiro de tudo, vamos entender : o WHERE é uma 
cláusula aplicada a CADA REGISTRO, um por vez, para filtragem, e o operador ALL 
indica que a condição deve ser verdadeira para TODOS os valores - sabendo-se 
isso, uma condição 

WHERE coluna = ALL (x, y, z) 

evidentemente *** NUNCA *** vai ser verdadeira, pois um valor de uma coluna 
NUNCA vai ser igual aos três ao mesmo tempo, ok ??? Óbvio que vc obteve "No 
Results" na sua primeira tentativa... O que vc quer é pesquisar NÂO por 
Igualdade, mas por presença, então esqueça o '=' , blz ? No banco 8i, já que vc 
não tem a REGEXPe iirc não tem Contexts também, as únicas opções pra se 
pesquisar por existência de uma substring dentro de outra são : o LIKE, as 
funções string tipo INSTR, escrita de uma função PL/SQL customizada sua ou 
alguma combinação complexa com Analytics (estes já existiam no 8i, só não 
lembro o release 8i exato em que foram introduzidos).
 Para usar o LIKE ou funções built-in, isso VAI implicar em SQL dinâmico, 
imagino que vc terá que ter uma rotina sua, que recebe os parâmetros digitados 
e os expande em vários LIKE, tipo :
 
  WHERE coluna LIKE '%param1%' AND coluna LIKE '%param2%' and COLUNA like 
'%param3%'
  
 ou com built-ins se quiser, algo assim..
 
A opção de função customizada sua seria algo que vc chamaria no WHERE, tipo :

WHERE minha_função(coluna, paramdebusca1, paramdebusca2, paramde busca3) = 1 ...

lógico, NENHUMA dessas alternativas vão ser extremamente saudável pra 
performance, mas é isso... A menos danosa imagino que seria montar alguma 
combinação com Analytics, mas e algo a se pesquisar...

 []s
 
   Chiappa
--- Em oracle_br@yahoogrupos.com.br, Pablo Câmara  escreveu
>
> *paramentroDaTela  := BABCOCK DIGIMAPAS TUBO*
> *
> *
> *1) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE TXT_DOCUMENTO
> IN (paramentroDaTela)*
> *
> *
> *No caso 1:  vai retornar o código de varios documentos.  Sendo uma tabela
> de 3 milhoes de registros. Fica inviável.*
> *
> *
> *2) SELECT COD_DOCUMENTO FROM ARQ.REFERENCIAS_DOCUMENTOS WHERE TXT_DOCUMENTO
> =ALL (paramentroDaTela)*
> *
> *
> *No caso 2: Se o comando funcionasse, traria apenas o código do documento,
> no qual todas as palavras passadas como paramentro fazem parte.*
> *
> *
> *Alguem tem alguma outra sugestão? PS: ORACLE 8I.*
> *
> *
> *Em outras versões do oracle (a partir do 9i) eu utilizo o regexp_like. Ou
> faço a busca por contexto.*
> *
> *
> *Pablo*
> *
> *
> *
> *
> *
> *
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>