Pular para o conteúdo
  • Este tópico contém 7 respostas, 2 vozes e foi atualizado pela última vez 16 anos atrás por rwarstat.
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #91124
    rwarstat
    Participante

      Pessoal,

      Estou tentando criar um índice do tipo CTXCAT.
      Para isso executei o script ctxsys.sql que em no Oracle e dei permissão de execução para o meu usário na package CTX_DDL.

      Para criar o índice estou usando os seguintes comando no schema dono da tabela

      begin

      ctx_ddl.create_index_set('ix_nm_paciente');
      ctx_ddl.add_index('ix_nm_paciente','nm_paciente');

      end;

      CREATE INDEX ix_nm_paciente ON paciente(nm_paciente) INDEXTYPE IS CTXCAT PARAMETERS ('index set ix_nm_paciente');

      Quando excuto o comando CREATE INDEX dá o erro

      ORA-29833: indextype does not exist

      []´s
      Roberto

      #91133
      rwarstat
      Participante

        Estava verificnado e o tipo de índice existe, mas o meu usuário não enxerga ele. Como posso resolver isso?

        []´s
        Roberto

        #91138
        burga
        Participante

          Tenta com essa grant

          GRANT CTXAPP TO “USUARIO”;

          #91140
          rwarstat
          Participante

            Continua retornando o mesmo erro.

            Havia esquecido de falar, o banco é um 10.2.0.1 rodando sobre Windows XP. Depois ele será passado para um linux.

            []´s
            Roberto

            #91142
            rwarstat
            Participante

              Bom, executei a linha abaixo
              CREATE INDEX ix_nm_paciente ON paciente(nm_paciente) INDEXTYPE IS CTXSYS.CTXCAT PARAMETERS ('index set ix_nm_paciente');

              Parou com o erro que o indextype não existia, mas agora ocorreu esse.

              ORA-29855: ocorreu um erro na execução da rotina ODCIINDEXCREATE
              ORA-20000: Erro do Oracle Text:
              DRG-10700: a preferência não existe: CTXSYS.DEFAULT_DATASTORE
              ORA-06512: em “CTXSYS.DRUE”, line 160
              ORA-06512: em “CTXSYS.CATINDEXMETHODS”, line 97

              []´s
              Roberto

              #91148
              rwarstat
              Participante

                Vou explicar melhor o quê estou querendo fazer. É bem provável que a minha abordagem esteja errada.

                Tenho uma tabela que armazena os pacientes atendidos. Nessa tabela preciso pesquisar os pacientes que contem uma determinada string e essa coluna deve ser indexada.
                Se utilizar a clausula like terei um custo muito alto, pois o like não faz uso de índice.

                Alguém tem alguma dica de como fazer isso?

                []´s
                Roberto

                #91152
                burga
                Participante

                  Oi Roberto,

                  No caso da clausula like se a sua busca for por ‘string%’ ela não “mataria” o indice, agora se a sua busca pode conter qualquer palavra antes (‘%string’ ou ‘%string%’) acredito que somente com os índices CTX mesmo.

                  Aqui na empresa nós temos estes índices mas utilizamos o CONTEXT e não o CTXCAT. Nunca peguei este erro que você está tendo, mas aí vai um exemplo do script que utilizamos:


                  -- conectado como system ou sysdba
                  GRANT RESOURCE, CONNECT, CTXAPP TO "USUARIO";
                  GRANT CREATE TABLE TO "USUARIO";
                  GRANT EXECUTE ON CTXSYS.CTX_CLS TO "USUARIO";
                  GRANT EXECUTE ON CTXSYS.CTX_DDL TO "USUARIO";
                  GRANT EXECUTE ON CTXSYS.CTX_DOC TO "USUARIO";
                  GRANT EXECUTE ON CTXSYS.CTX_OUTPUT TO "USUARIO";
                  GRANT EXECUTE ON CTXSYS.CTX_QUERY TO "USUARIO";
                  GRANT EXECUTE ON CTXSYS.CTX_REPORT TO "USUARIO";
                  GRANT EXECUTE ON CTXSYS.CTX_THES TO "USUARIO";
                  GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO "USUARIO";
                  ALTER USER USUARIO DEFAULT ROLE ALL;

                  -- conectado como usuario
                  BEGIN
                  CTX_DDL.CREATE_PREFERENCE('USUARIO_lexer', 'BASIC_LEXER');
                  CTX_DDL.SET_ATTRIBUTE('USUARIO_lexer', 'base_letter', 'YES');
                  CTX_DDL.CREATE_PREFERENCE('USUARIO_wordlist', 'BASIC_WORDLIST');
                  CTX_DDL.SET_ATTRIBUTE('USUARIO_wordlist', 'WILDCARD_MAXTERMS', 15000);
                  END;
                  /

                  BEGIN
                  CTX_DDL.CREATE_PREFERENCE('ctx_store_tbs', 'BASIC_STORAGE');
                  CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs','I_TABLE_CLAUSE',
                  'tablespace USUARIO_I storage (initial 10M next 10M)');
                  CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs', 'K_TABLE_CLAUSE',
                  'tablespace USUARIO_I storage (initial 10M next 10M)');
                  CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs', 'R_TABLE_CLAUSE',
                  'tablespace USUARIO_I storage (initial 1M) lob (data) store as (cache)');
                  CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs', 'N_TABLE_CLAUSE',
                  'tablespace USUARIO_I storage (initial 1M)');
                  CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs', 'I_INDEX_CLAUSE',
                  'tablespace USUARIO_I storage (initial 1M) compress 2');
                  CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs', 'P_TABLE_CLAUSE',
                  'tablespace USUARIO_I storage (initial 1M)');
                  END;
                  /

                  CREATE INDEX "USUARIO"."PAIS_CTX_I" ON "USUARIO".PAISES (NOME)
                  INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ( 'LEXER USUARIO_lexer WORDLIST USUARIO_wordlist STORAGE ctx_store_tbs SYNC (ON COMMIT)' );

                  Note que nos egundo procedimento eu defino a tablespace USUARIO_I a ser usada pelo indice.

                  #91153
                  rwarstat
                  Participante

                    Valeu Tajiri !!!
                    Vou dar uma estudada nesse código que tu me passou.
                    Tô iniciando agora com o Oracle Text (para ser mais exato, hoje) e tá difícil.

                    Depois posto aqui o resultado disso.

                    []´s
                    Roberto

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