.comment-link {margin-left:.6em;}

Saturday, July 07, 2007

Consulta Ignorando Acentos

Algum tempo atrás, me fizeram uma pergunta sobre consulta sem considerar acentos. Quando respondi, falhei em pesquisar um pouco mais a fundo e então sugeri uma opção trabalhosa para resolver o problema.

Semana passada, fiz uma página de "eWho" - procura de ramais - que necessitava exatamente do mesmo mecanismo de busca, ou seja, que ignorasse acentos, maísculas e minúsculas. Como sempre recorro ao meu blog, vi no artigo que eu tinha que fazer uma tabela de conversão, pensei "não é possível!" e como sou muito preguiçoso, me restou ler o manual de globalização e encontrar exatamente o que precisava no capítulo 5.

Bastou dois alter session e a query vai ignorar os acentos.

ops$marcio:LX10G> select * from t where x = 'marcio';

no rows selected

ops$marcio:LX10G> alter session set nls_comp=linguistic;

Session altered.

ops$marcio:LX10G> alter session set nls_sort=binary_ai;

Session altered.

ops$marcio:LX10G> select * from t where x = 'marcio';

X
--------------------
Márcio
MÁRCIO
MARCIO

3 rows selected.

Labels: ,


Comments:
Olá, "tio" Marcio!
Aqui é o 1000tão, do amigos_oracle, lembra de mim?

Ótima dica, muito útil, e acredito que quase ninguém conhece esta solução.
Quase nunca posto aqui no seu blog, mas visito com frequência.
Fui contratado semana passada pela Stefanini, agora sou DBA Oracle da Case New Holland, e com isso estou voltando a estudar administração Oracle, e seu blog é sempre uma de minhas fontes de referência.

Abraço. tenha uma ótima semana

Milton Bastos
 
Desculpe usar este tópico mas preciso dizer que existe um erro num desafio da revista SQL Magazinhe edição 46 (Triggers)

O desafio diz que é pra usar SQL Puro, entretanto na resposta vc usou a função LAG que é exclusiva do ORACLE. Isso não vale! E o SQL Puro???? Não tem no MS SQL Server.
 
Fausto, voce tem toda razão e eu fiz, corretamente, a correção quando me foi enviado o artigo para revisão. Entretanto a revista publicou mesmo assim o artigo. Precisamos melhorar isso no futuro, obrigado pelo alerta.

abraços,
Marcio Portes.
 
Sugestão de tópico:
Novo operador "Pivot" da versão 11g!

Abraço!
 
Olá
queria saber em qual versao do oracle consigo alterar essas configuracoes?
temos um 8i e nao consegui realizar os testes
quando executo o codigo:
alter session set nls_comp = linguistic;
ou
alter session set nls_sort=binary_ai;
ele me informa
invalid or unknown NLS parameter value specified.

uma observacao
se eu usar o session a configuracao funciona durante uma sessao, alter instance durante a instancia e a database altera no banco de dado todo certo?

att
Derick Conti Pereira
derickcp@gmail.com
skype: derickcp
 
Derik, a versão do teste foi 10gR2. No 8i, estas funções não existiam.
Alter session - sessão
Alter system - Instancia, e voce determina o escopo se spfile, memoria ou ambos.
 
Fiz a alteração no meu banco e o sistema ficou bastante lento. Procurando na internet achei alguns artigos dizendo que esses parametros requerem do banco full scan em todas as consultas. Isso faz sentido? Era pro banco ficar mais lento mesmo com esses novos parametros?
 
alexandre, faça essas alterações em nível de sessão, não é recomendável que deixe os parâmetros "setados" para todo o banco, eles são para tratamento de exceção.
 
Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?