Bonjour,

J'ai un index Oracle Text sur une colonne 'Titre' de type CLOB :
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');
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
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;
/
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).
Par contre, l'index n'est pas recalculé.
Exemple :
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.
Quelqu'un a-t-il une petite idée ? La solution ?


Merci