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, [email protected] [oracle_br] <
[email protected]> 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
> 
>

Responder a