synchronisation unique index d'ordonnancement texte Oracle
-
28-09-2019 - |
Question
Je dois synchroniser un index de texte oracle. Mais l'emploi ne parvient pas à créer:
declare
v_job_id number(19,0);
begin
dbms_job.submit(
JOB => v_job_id,
WHAT => 'alter index NAME_IDX rebuild parameters (''sync'');',
NEXT_DATE => SYSDATE + (1/24),
INTERVAL => 'SYSDATE + (1/24) + 7'
);
end;
/
Ou à exécuter:
declare
v_job_id number(19,0);
begin
dbms_job.submit(
JOB => v_job_id,
WHAT => 'CTX_DDL(''NAME_IDX'');',
NEXT_DATE => SYSDATE + (1/24),
INTERVAL => 'SYSDATE + (1/24) + 7'
);
end;
/
Mais si je lance l'une de ces œuvres:
alter index NAME_IDX rebuild parameters ('sync');
call CTX_DDL('NAME_IDX');
Toute idée de la syntaxe correcte?
Merci.
PD: Ive été à la recherche, mais la seule réponse que je ne marche pas trouvé répondre à mes besoins. Je présente également mes excuses pour mon anglais.
La solution
Vous pouvez exécuter un bloc anonyme, appel n'est pas en PL / SQL, ALTER INDEX est DDL, et vous devez spécifier la procédure CTX_DDL que vous souhaitez exécuter:
WHAT => 'BEGIN EXECUTE IMMEDIATE ''alter index NAME_IDX rebuild parameters (''''sync'''')''; CTX_DDL.sync_index(''NAME_IDX''); END',
Cependant, personnellement je préfère encapsuler dans une procédure (ou, mieux encore, un paquet) et appeler la procédure du travail:
CREATE PROCEDURE rebuild_name_idx IS
BEGIN
EXECUTE IMMEDIATE 'alter index NAME_IDX rebuild parameters (''sync'')';
CTX_DDL.sync_index('NAME_IDX');
END;
/
declare
v_job_id number(19,0);
begin
dbms_job.submit(
JOB => v_job_id,
WHAT => 'rebuild_name_idx;',
NEXT_DATE => SYSDATE + (1/24),
INTERVAL => 'SYSDATE + (1/24) + 7'
);
end;
/
De plus, je suis sûr que vous n'avez pas réellement besoin de reconstruire l'index -. Vous ne devez appeler CTX_DDL.sync_index
pour rafraîchir de toute DML sur la table