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