Oracle文本调度单索引同步

Oracle文本调度单索引同步,oracle,text,oracle-text,Oracle,Text,Oracle Text,我需要同步oracle文本索引。但job无法创建: 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 =>

我需要同步oracle文本索引。但job无法创建:

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;
/
或运行:

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;
/
但如果我运行这些工作中的任何一个:

alter index NAME_IDX rebuild parameters ('sync');
call CTX_DDL('NAME_IDX');
你知道正确的语法吗

多谢各位


我一直在寻找,但我找到的唯一答案不符合我的要求。我也为我的英语道歉。

您可以运行匿名块,调用不在PL/SQL中,ALTER INDEX是DDL,并且您需要在CTX_DDL中指定要运行的过程:

WHAT => 'BEGIN EXECUTE IMMEDIATE ''alter index NAME_IDX rebuild parameters (''''sync'''')''; CTX_DDL.sync_index(''NAME_IDX''); END',
但是,就个人而言,我更喜欢将其封装在过程(或者更好的是,封装在包中)中,并从作业中调用该过程:

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

另外,我非常确定您实际上不需要重建索引-您只需调用
CTX_DDL.sync_index
即可从表中的任何DML刷新它。

谢谢。这就是对我有效的方法:what=>'开始立即执行''alter index NAME_IDX rebuild parameters(''sync'')';完",,另一个问题,和CTX_DDL。优化_索引('INDEX_NAME','FULL',45);45分钟。这是什么?谢谢你<代码>内容=>'CTX_DDL.OPTIMIZE_索引('INDEX_NAME','FULL',45);'我的错,这是权限问题。很抱歉