首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单个索引上的Oracle text scheduling同步

单个索引上的Oracle text scheduling同步
EN

Stack Overflow用户
提问于 2010-10-06 19:27:41
回答 1查看 1.9K关注 0票数 2

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

代码语言:javascript
复制
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;
/

或者运行:

代码语言:javascript
复制
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;
/

但是如果我运行这些工作中的任何一个:

代码语言:javascript
复制
alter index NAME_IDX rebuild parameters ('sync');
call CTX_DDL('NAME_IDX');

你知道正确的语法是什么吗?

谢谢。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-06 19:49:49

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

代码语言:javascript
复制
WHAT => 'BEGIN EXECUTE IMMEDIATE ''alter index NAME_IDX rebuild parameters (''''sync'''')''; CTX_DDL.sync_index(''NAME_IDX''); END',

然而,就我个人而言,我更喜欢将其封装在一个过程(或者,更好的情况下,是一个包)中,并从作业中调用该过程:

代码语言:javascript
复制
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刷新它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3871947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档