Pular para o conteúdo
  • Este tópico contém 8 respostas, 3 vozes e foi atualizado pela última vez 18 anos atrás por Marcio68Almeida.
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #78016
    Wendel
    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

      #78020
      chduarte
      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

        []

        #78022
        chduarte
        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.

          []

          #78106
          Wendel
          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

            #78108
            chduarte
            Participante

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

              []

              #78112
              Wendel
              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

                #78114
                chduarte
                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?

                  []

                  #78116
                  Wendel
                  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.

                    #78118
                    Marcio68Almeida
                    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… 😀

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