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 jlchia...@yahoo.com.br 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 oracle_br%40yahoogrupos.com.br, Pablo Câmara pscam...@... 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)
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 pscam...@gmail.com 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 jlchia...@yahoo.com.br jlchiappa%40yahoo.com.br 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 oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br, Pablo Câmara pscam...@... 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 jlchia...@yahoo.com.br 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 oracle_br%40yahoogrupos.com.br, Pablo Câmara pscam...@... 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 jlchia...@... 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 oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br, Pablo Câmara pscamara@ 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 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 jlchia...@yahoo.com.br 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 oracle_br%40yahoogrupos.com.br, Pablo Câmara pscam...@... 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)
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 jlchia...@yahoo.com.br 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 oracle_br%40yahoogrupos.com.br, Pablo Câmara pscam...@... 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 jlchia...@... 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 oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br, Pablo Câmara pscamara@ 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)
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) wellington.flavi...@ge.com Utiliza o exists, where exits coluna = 1 ... And exists coluna =3 ... Acredito que funciona... -Original Message- From: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br[mailto: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br] On Behalf Of Pablo Câmara Sent: Friday, July 31, 2009 3:07 PM To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.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 jlchia...@yahoo.com.br jlchiappa%40yahoo.com.br 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 oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br, Pablo Câmara pscam...@... 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 jlchia...@... 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 oracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br, Pablo Câmara pscamara@ 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
Re: [oracle_br] Re: USO DO COMANDO IN (=ANY)
Valeu a todos! 2009/7/31 Pablo Câmara pscam...@gmail.com 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) wellington.flavi...@ge.com Utiliza o exists, where exits coluna = 1 ... And exists coluna =3 ... Acredito que funciona... -Original Message- From: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br[mailto: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br] On Behalf Of Pablo Câmara Sent: Friday, July 31, 2009 3:07 PM To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.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 jlchia...@yahoo.com.br jlchiappa%40yahoo.com.br 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 oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br, Pablo Câmara pscam...@... 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 jlchia...@... 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.broracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br, Pablo Câmara pscamara@ 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
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 jlchia...@yahoo.com.br 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 oracle_br%40yahoogrupos.com.br, Pablo Câmara pscam...@... 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 jlchia...@... 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 oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br, Pablo Câmara pscamara@ 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 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.broracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br, Pablo Câmara pscamara@ 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