› Fóruns › Banco de dados Oracle › Erro na criação de índice › Erro na criação de índice
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.