- Este tópico contém 11 respostas, 5 vozes e foi atualizado pela última vez 13 anos, 10 meses atrás por
airoosp.
-
AutorPosts
-
9 de janeiro de 2007 às 8:22 pm #78197
Wendel
ParticipanteOlá!
Como todos sabem o Oracle diferencia Letras Maiusculas de Minusculas.
Tenho uma aplicação que faz pesquisa na Base de dados, mas o usuário quer que aceite para inserção da expressao de busca tanto letras maisculas como minusculas, independente do que esteja na Base de dados. Alguem sabe alguma configuração que deixe o oracle ficar igual no Access.
Sei que tem o comando Upper, ´mas é que dai vou ter que mexer no código inteiro. Alguem sabe outra alternativa. ValeuWendel
9 de janeiro de 2007 às 8:40 pm #78198chduarte
ParticipanteVamos la no exemplo:
SQL> create table test_sort (f varchar2(50));
SQL> insert into test_sort values (‘&valor’);
Valor teste 1
vAlOr Teste 2
VALOR teste 3SQL> select *
from test_sort
where f like ‘Valor%’;F
Valor teste 1
SQL> alter session set nls_comp=’LINGUISTIC’;
SQL> alter session set NLS_SORT=’BINARY_CI’;SQL> select *
from test_sort
where f like ‘Valor%’;F
Valor teste 1
vAlOr Teste 2
VALOR teste 3[]
9 de janeiro de 2007 às 8:43 pm #78200chduarte
ParticipanteEsqueci de mencionar que voce tambem pode utilizar indices de Oracle text mas ai teria que alterar a aplicacao. Neste caso suas consultas vicam mais complexas.
Com o Oracle Text voce pode indexar documentos Word, Excel, PDF ate imagens e videos e pesquisar textos dentro destes documentos por nivel de relevancia e score.
[]
11 de janeiro de 2007 às 3:21 pm #78301Wendel
ParticipanteOlá,
Testei as duas alterações de session passadas e não funcionam. Será que é a versão??
Tirei a aspas, coloquei e nada, o erro que dá é esse.SQL> ALTER SESSION SET NLS_SORT=BINARY_CI;
ERROR:
ORA-12705: valor inválido ou desconhecido do parâmetro NLS especificadoO oracle que uso é o 9i. Alguem tem alguma dica do que posso fazer??
OBRIGADO
WENDEL11 de janeiro de 2007 às 3:32 pm #78303chduarte
ParticipanteTenta somente :
SQL> alter session set NLS_SORT=’BINARY’;[]
11 de janeiro de 2007 às 4:17 pm #78308Wendel
ParticipanteNão estou com sorte, mas não vou desistir…rs.
Teste o comando:
SQL> alter session set NLS_SORT=’BINARY’a sessão foi alterada mas não retornou as 3 linhas do teste. somente a linha:
Valor teste 1
Tentei também uns parametros deste FAQ:
http://www.orafaq.com/forum/t/73009/2/
SQL> alter session set nls_comp = ANSI;
Session altered.SQL> alter session set nls_sort = GENERIC_BASELETTER;
Session altered.
Mas também só retornou uma linha.
Tentei também:
SQL> alter session set NLS_COMP=’BINARY’mas também só retornou uma linha da consulta.
Você sabe mais alguma forma de tornar Case Insensitive as consultas?
WENDEL
11 de janeiro de 2007 às 4:33 pm #78309chduarte
ParticipanteAlgo estranho. Esta é a forma documentada de fazer este tipo de consulta. Segue um pedaco da documentacao:
“Performing a Generic Base Letter Search
You can perform a search that ignores case and diacritics. Enter the following statements:
ALTER SESSION SET NLS_COMP=ANSI;
ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER;Then enter a statement similar to the following:
SELECT * FROM emp WHERE ename=’miller’;
This statement can now return names that include the following:
Miller
MILLER
Millér”Existem mais registros na sua tabela correto?
[]
11 de janeiro de 2007 às 4:55 pm #78311Wendel
ParticipanteCONSEGUI…
Usei os ultimos comandos..
SQL> alter session set nls_comp = ANSI;SQL> alter session set nls_sort = GENERIC_BASELETTER;
Não funcionou para a tabela Test_Sort que criei.. mas para outras tabelas do banco funcionou. exemplo do teste que fiz.
SQL> SELECT * FROM AREA;
CD_AREA SL_ DS_AREA
1 INF Informática 2 LOG Logistica 3 CRE Corporate Real State 4 IMV Administração de Imóveis 5 DIR Diretoria 6 IT Information Tecnology 7 COB Cobrança 8 SEG Segurança 9 AST ASSET 10 CSU CSU 11 MKT MARKETING
SQL> SELECT * FROM AREA WHERE DS_AREA= ‘mARketinG’;
CD_AREA SL_ DS_AREA
11 MKT MARKETING
Obrigado.
11 de janeiro de 2007 às 5:02 pm #78314Marcio68Almeida
ParticipanteFiz o seguinte teste baseado nas informações de nosso colega..
Conectado a:
Oracle9i Release 9.2.0.6.0 - Production
JServer Release 9.2.0.6.0 - ProductionSQL> create table teste (nome varchar2 (50));
SQL> insert into teste values ('MarciO');
SQL> insert into teste values ('MaRcIo');
SQL> insert into teste values ('mArCiO');
SQL> insert into teste values ('márCiO');SQL> commit;
SQL> ALTER SESSION SET NLS_COMP=ANSI;
SQL> ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER;SQL> Select * from teste where nome = 'marcio';
NOME
MarciO
MaRcIo
mArCiO
márCiO
ao que tudo indica, funciona perfeitamente, inclusive com acentuação… 😀21 de outubro de 2010 às 10:38 pm #96518airoosp
ParticipanteBoa tarde,
Também utilizo a versão 9i, após as configurações você conseguiu fazer a pesquisa utilizando o LIKE?
Obrigado.
Airton
22 de outubro de 2010 às 4:00 am #96520burga
ParticipanteCom o 9i, não tem como fazer o LIKE funcionar de forma “case-insensitive” implicitamente… Outra coisa, alterar o NLS_SORT pode fazer com que os índices das colunas condicionais não sejam utilizados em uma consulta (veja o exemplo do link abaixo).
http://decipherinfosys.wordpress.com/2007/01/28/case-insensitive-behavior-in-oracle/
EDIT:
Pesquisando um pouco mais na net (por curiosidade), encontrei outro problema relacionado aos índices:
Small Caveat
The one other caveat you need to be aware of is that in order for the linguistic index to be used the column in the table must be NOT NULLable. Alternatively, you can add the WHERE IS NOT NULL to your SQL statement.
http://www.dbasupport.com/oracle/ora10g/globalization0601.shtml
E falando a mesma coisa na documentação:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/ch5lingsort.htm#i1006531Então, pra não dar problemas inesperados, acho que seria legal pensar na viabilidade de usar o UPPER mesmo (ou qualquer outra função que faça o que você quer)…
22 de outubro de 2010 às 5:07 pm #96524airoosp
ParticipanteVou pensar em outra solução, agradeço pelas informações.
Obrigado.
Airton
-
AutorPosts
- Você deve fazer login para responder a este tópico.