Daniel,

   Não é o melhor dos mundos em se tratando de performance, mas, você poderia 
usar essa function neste link
http://glufke.net/oracle/viewtopic.php?t=516

Dependendo de como vc vai buscar, nao vai ficar ruim, tente adicionar mais 
filtros...

Select *
>From tab1
Where f_tiraacento(col1)='JOAO';

OBS.: isso vai fazer um full scan, entao tome cuidado principalmente ao usar em 
uma tabela grande.


Get Outlook for iOS<https://aka.ms/o0ukef>

________________________________
From: oracle_br@yahoogrupos.com.br <oracle_br@yahoogrupos.com.br> on behalf of 
Daniel Mota daniel...@gmail.com [oracle_br] <oracle_br@yahoogrupos.com.br>
Sent: Tuesday, December 20, 2016 10:34:02 PM
To: oracle_br@yahoogrupos.com.br
Subject: Re: [oracle_br] Re: Duvida na construção de select para locali zar um 
Nome com ou sem acento (JOÃO e JOAO)



Boa noite Chiappa.

Me desculpe, no momento de pedir ajuda acabei deixando itens importantes sem 
descrever.
Estou me conectando a um banco oracle 11g na release 11.2.0.4 se não me engano, 
a aplicação é feita em delphi, a mesma tem apenas um user, e os usuários do 
sistema são geridos em uma tabela neste usuário.

A empresa esta entrando em recesso vou testar as suas sugestões. Infelizmente 
não dispomos de um DBA, por isso de estar aqui pedindo ajuda.

Agradeço a sua disposição.

att,

Daniel

Em 14 de dezembro de 2016 11:02, 
jlchia...@yahoo.com.br<mailto:jlchia...@yahoo.com.br> [oracle_br] 
<oracle_br@yahoogrupos.com.br<mailto:oracle_br@yahoogrupos.com.br>> escreveu:


Seguinte : vc tem diversas possibilidades pra isso - como vc não diz a Versão 
nem a Edição do seu RDBMS Oracle, nem diz se usa sessões isoladas ou algum tipo 
de pool de conexão pra se conectar no banco, e Também não diz se cada usuário 
da aplicação cria a sua sessão particular com o seu usuário no banco Oracle , 
não podemos dizer qual dessas soluções abaixo seria aplicável....
 Estou (já que vc NÂO NOS INFORMA) aqui SUPONDO que a sua aplicação tem os SQLs 
escritos no código-fonte, e que através de algum comando da linguagem/tool de 
desenvolvimento a aplicação se conecta no banco , esses SQLs são enviados pro 
banco e os resultsets são processados na aplicação...

 Isso posto,  de modo geral seriam as soluções  :

a. SE for viável em termos de Armazenamento/gasto de espaço em disco, vc pode 
ter uma coluna que ESPELHA o conteúdo da coluna NM_ENTIDADE mas tirando 
acentos, depois a Aplicação faz a consulta nessa coluna-espelho MAS exibe a 
coluna 'real' : no banco 11g em diante isso seria Automático usando o recurso 
da VIRTUAL COLUMN, em versões mais antigas a Aplicação teria que manter isso OU 
vc teria que ter uma trigger

b. SE cada usuário tem a sua sessão dedicada no banco, E os outros SQLs que vão 
ser executados nessa sessão podem também trabalhar com comparações sem 
acentuação, vc pode Ajustar alguns parâmetros de sessão para que o Oracle faça 
comparações e ordenações desprezando acentos : seriam comandos tipo ALTER 
SESSION SET NLS_COMP=LINGUISTIC; e  ALTER SESSION SET NLS_SORT=BINARY_xx; , one 
esse xx pode ser CI (Case-Insensitive, também ignora maiusc/minusc) ou pode não 
estar presente (só BYNARY) aí respeita  minusc/maiusc, entre outras opções - 
CONSULTE A DOCUMENTAÇÂO DA SUA VERSÃO, isso pode mudar de acordo com a versão 
em uso...
 Isso pode ser feito dentro da aplicação (basta a aplicação mandar o comando 
ALTER SESSION desejado pro banco - isso é SQL (veja que o comando ALTER é **** 
SIM **** um comando SQL, até por isso está DOCUMENTADO NO MANUAL ORACLE DE 
SQL!!), então da mesma maneira que a sua linguagem/tool de programação pe capaz 
de enviar SELECTs pro banco ela DEVE SER CAPAZ de enviar ALTER SESSION), ou 
ENTÃO isso pode ser feito automaticamente pelo RDBMS Oracle quando a sessão é 
criada (veja o item LOGON TRIGGER na doc Oracle).

 Uma ** VARIAÇÃO ** da técnica, para 'isolar' o setting de ignorar acentos pra 
uma query, é vc (NO CÓDIGO-FONTE da sua aplicação!) alterar imediatamente antes 
da sua query o ALTER, executar a query e depois voltar o ALTER para o valor que 
estava antes....

c. a sua idéia de ter uma função que troca os caracteres acentuados é possível 
sim também : a TRANSLATE funciona, é possível também usar outras funções 
built-in do RDBMS Oracle, e tais funções podem ser encapsuladas numa FUNCTION 
sua ou escritas diretamente no SQL da aplicação, sim....


==> Porém, temos as questões de performance, SE o volume de dados a pesquisar 
será considerável : pra começo de conversa, se vc tem um índice criado com o 
valor "normal" da coluna X, OBVIAMENTE é isso que está armazenado no índice, se 
vc altera esse conteúdo com uma função qualquer LOGICAMENTE o índice não tem 
mais os mesmos valores então via de regra NÂO será Usado..... Pra solucionar 
isso, vc pode criar um índice que indexe a mesma exata função que vc vai usar 
na pesquisa, veja na doc Oracle sobre FUNCTION BASED INDEX...
 Outro ponto é que vc usa % no começo e no fim, isso via de regra ** IMPEDE ** 
a utilização plena de um índice comum, pois o %valor% indica que o valor pode 
estar em QUALQUER posição do índive, aí o RDBMS teria que varrer o índice 
INTEIRINHO.... SE vc tiver isso instalado e disponível no seu RDBMS Oracle , 
normalmente é muito mais performático para esse tipo de pesquisa um índice do 
tipo TEXT, que é pensado/criado para pesquisas incompletas..... Veja na doc as 
refs, E consulte com seu DBA se vc tem o recurso disponível....

 []s

  Chiappa



  • [oracle_br] Duvid... daniel...@gmail.com [oracle_br]
    • RE: [oracle_... 'Schiavini' et...@schiavini.inf.br [oracle_br]
      • RE: [ora... daniel...@gmail.com [oracle_br]
        • Re: ... Evandro Giachetto evandrogiache...@gmail.com [oracle_br]
          • ... Eduardo Perdomo panc...@gmail.com [oracle_br]
    • [oracle_br] ... jlchia...@yahoo.com.br [oracle_br]
      • Re: [ora... Daniel Mota daniel...@gmail.com [oracle_br]
        • Re: ... Rodrigo Mufalani rodr...@mufalani.com.br [oracle_br]
          • ... jlchia...@yahoo.com.br [oracle_br]
        • Re: ... carlosaama...@yahoo.com.br [oracle_br]
          • ... jlchia...@yahoo.com.br [oracle_br]
            • ... Daniel Mota daniel...@gmail.com [oracle_br]
              • ... jlchia...@yahoo.com.br [oracle_br]
    • RE: [oracle_... 'Schiavini' et...@schiavini.inf.br [oracle_br]

Responder a