2016-10-24 4 views
0

今日は、ジョブを作成し、実行時に所定の時間を超えると終了させる必要があります。Oracle_Scheduling_Job_ DBMS_SCHEDULER.CREATE_JOBでmax_run_durationを直接設定できません

私は検索して、その意図のために属性max_run_durationを設定する必要があることを発見しました。

私の質問は簡単です:ジョブを作成するときに、なぜその属性を直接設定できないのですか?なぜ私はジョブを最初に作成してから、その属性を後で設定する必要があるのですか、あるいは何か間違っていますか?

誰かがこの論理を私に説明できますか?

オラクルのスタッフがcreate_funtionを変更して新しい属性にset_attribute関数を追加するのが悪いと感じている、新しいバージョンのOracleに追加されたaddition attributesがあるかもしれませんか?

【選択エラースクリプト:(ORA-06550: PLS-00306: wrong number or types of arguments in call to 'CREATE_JOB'

BEGIN 
DBMS_SCHEDULER.CREATE_JOB (
    job_name   => 'my_job_name', 
    job_type   => 'STORED_PROCEDURE', 
    job_action   => 'schema_name.procedure_name', 
    start_date   => '24-OCT-16 08.00.00 PM', 
    repeat_interval => 'FREQ=DAILY;BYHOUR=20;', 
    max_run_duration => INTERVAL '4' HOUR, 
    auto_drop   => FALSE, 
    comments   => 'my comment here'); 
END; 
/

【選択OKスクリプト:

BEGIN 
DBMS_SCHEDULER.CREATE_JOB (
    job_name   => 'my_job_name', 
    job_type   => 'STORED_PROCEDURE', 
    job_action   => 'schema_name.procedure_name', 
    start_date   => '24-OCT-16 08.00.00 PM', 
    repeat_interval => 'FREQ=DAILY;BYHOUR=20;', 
    -- max_run_duration => INTERVAL '4' HOUR, 
    auto_drop   => FALSE, 
    comments   => 'my comment here'); 

    DBMS_SCHEDULER.SET_ATTRIBUTE( 
    name => 'my_job_name', 
    attribute => 'max_run_duration', 
    value => INTERVAL '4' HOUR 
); 
END; 
/

答えて

2

チェックドキュメント、CREATE_JOB Procedure

CREATE_JOBプロシージャはオーバーロードされますが、 6つのプロシージャのどれもがパラメータを受け付けません。あなたはこれを意図通りにDBMS_SCHEDULER.SET_ATTRIBUTEで設定する必要があります。

たぶん、あなたはCREATE_JOBS Procedureを使用することができます。

DECLARE 
    jobs SYS.JOB_ARRAY; 
    job SYS.JOB; 
BEGIN 
    job := SYS.JOB('my_job_name', 
     job_type => 'STORED_PROCEDURE', 
     ...); 
    jobs := jobs(job); 
    DBMS_SCHEDULER.CREATE_JOBS(jobs) 
END; 

しかし、私は仕事を作成するために管理していませんでした。

関連する問題