Frage

Ich brauche ein Orakel Textindex zu synchronisieren. Aber Auftrag nicht erstellen:

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;
/

oder zu laufen:

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;
/

Aber wenn ich eine dieser Arbeiten auszuführen:

alter index NAME_IDX rebuild parameters ('sync');
call CTX_DDL('NAME_IDX');

Jede Idee, die richtige Syntax?

Danke.

PD: Ive gesucht, aber die einzige Antwort fand ich meine Anforderungen doesnt passen. Ich entschuldige mich auch für mein Englisch.

War es hilfreich?

Lösung

Sie können einen anonymen Block laufen, AUFRUF nicht in PL / SQL ist, ALTER INDEX DDL ist, und Sie müssen angeben, welche Verfahren in CTX_DDL Sie ausführen möchten:

WHAT => 'BEGIN EXECUTE IMMEDIATE ''alter index NAME_IDX rebuild parameters (''''sync'''')''; CTX_DDL.sync_index(''NAME_IDX''); END',

Allerdings persönlich ziehe ich es in einem Verfahren zur Einkapselung (oder, noch besser, ein Paket) und rufen Sie die Prozedur aus dem Job:

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;
/

Auch, ich bin ziemlich sicher, dass Sie tatsächlich den Index nicht wieder aufbauen müssen -. Sie nur auf Anruf CTX_DDL.sync_index müssen sie von jedem DML auf die Tabelle aktualisieren

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top