Pregunta

necesito para sincronizar un índice de texto oráculo. Pero el trabajo no puede crear:

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

o para ejecutar:

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

Pero si me quedo cualquiera de esas obras:

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

Cualquier idea de la sintaxis correcta?

Gracias.

PD: He estado buscando, pero la única respuesta que encontré duerma satisfacer mis necesidades. También me disculpo por mi Inglés.

¿Fue útil?

Solución

Puede ejecutar un bloque anónimo, llamada no está en PL / SQL, ALTER INDEX es DDL, y hay que especificar qué procedimiento en el CTX_DDL desea ejecutar:

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

Sin embargo, personalmente prefiero a encapsular en un procedimiento (o, mejor aún, un paquete) y llamar al procedimiento desde el trabajo:

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

Además, estoy bastante seguro de que en realidad no necesita reconstruir el índice -. Sólo tiene que CTX_DDL.sync_index llamada para refrescar a él desde cualquier DML en la tabla

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top