Pular para o conteúdo
  • Este tópico contém 11 respostas, 5 vozes e foi atualizado pela última vez 14 anos atrás por Avatar de airoospairoosp.
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #78197
    Avatar de WendelWendel
    Participante

      Olá!
      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. Valeu

      Wendel

      #78198
      Avatar de chduartechduarte
      Participante

        Vamos 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 3

        SQL> 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

        []

        #78200
        Avatar de chduartechduarte
        Participante

          Esqueci 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.

          []

          #78301
          Avatar de WendelWendel
          Participante

            Olá,

            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 especificado

            O oracle que uso é o 9i. Alguem tem alguma dica do que posso fazer??

            OBRIGADO
            WENDEL

            #78303
            Avatar de chduartechduarte
            Participante

              Tenta somente :
              SQL> alter session set NLS_SORT=’BINARY’;

              []

              #78308
              Avatar de WendelWendel
              Participante

                Nã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

                #78309
                Avatar de chduartechduarte
                Participante

                  Algo 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?

                  []

                  #78311
                  Avatar de WendelWendel
                  Participante

                    CONSEGUI…

                    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.

                    #78314
                    Avatar de Marcio68AlmeidaMarcio68Almeida
                    Participante

                      Fiz 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 - Production

                      SQL> 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… 😀

                      #96518
                      Avatar de airoospairoosp
                      Participante

                        Boa tarde,

                        Também utilizo a versão 9i, após as configurações você conseguiu fazer a pesquisa utilizando o LIKE?

                        Obrigado.

                        Airton

                        #96520
                        Avatar de burgaburga
                        Participante

                          Com 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#i1006531

                          Entã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)…

                          #96524
                          Avatar de airoospairoosp
                          Participante

                            Vou pensar em outra solução, agradeço pelas informações.

                            Obrigado.

                            Airton

                          Visualizando 12 posts - 1 até 12 (de 12 do total)
                          • Você deve fazer login para responder a este tópico.
                          plugins premium WordPress