質問

Oracle Text Indexを同期する必要があります。しかし、ジョブは作成できません:

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');

正しい構文のアイデアはありますか?

ありがとうございました。

PD:私は検索していますが、私が見つけた唯一の答えは私の要件に適合しません。私も英語をお詫びします。

役に立ちましたか?

解決

匿名のブロックを実行できます。通話は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から更新します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top