可以运行匿名块,调用不在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刷新它。