Bonjour,
J'ai un index Oracle Text sur une colonne 'Titre' de type CLOB :
Lors des mises à jour via une commande SQL, l'index n'est pas recalculé... Un petit tour sur Google plus tard, une solution consiste à créer un trigger qui déclenche un job de synchronisation soit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE INDEX IDX_EXTRACT_TITRE ON TABLE_TITLE (Titre) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('DATASTORE DS_EXTRACT_TITRE LEXER LX_EXTRACT_TITRE FILTER FILTER_EXTRACT_TITRE STORAGE STORAGE_EXTRACT_TITRE WORDLIST WORDLIST_EXTRACT_TITRE');
Le job est bien créé sur une mise à jour en base et s'exécute (enfin je pense et qu'il n'y a pas d'erreur dans la log ORACLE).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 CREATE OR REPLACE TRIGGER TU_TABLE_TITLE AFTER INSERT OR UPDATE OR DELETE ON TABLE_TITLE DECLARE v_job NUMBER; BEGIN IF deleting THEN DBMS_JOB.SUBMIT(v_job, 'ctx_ddl.optimize_index(''IDX_EXTRACT_TITRE '',''FULL'');', SYSDATE); ELSE DBMS_JOB.SUBMIT(v_job, 'ctx_ddl.sync_index(''IDX_EXTRACT_TITRE');', SYSDATE); END IF; END; / show errors; /
Par contre, l'index n'est pas recalculé.
Exemple :
Quelqu'un a-t-il une petite idée ? La solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 UPDATE TABLE_TITLE SET titre = 'LES INDEX TEXT C LA FETE' WHERE cle=une cle SELECT count(*) FROM TABLE_TITLE WHERE CONTAINS(TITRE, 'INDEX') > 0 me retourne 0 enregistrement.
Merci
Partager