Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)
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)
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, >>
Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)
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)
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)
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)
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]
Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)
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)
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]