Oracle_Scheduling_Job_无法直接在DBMS_SCHEDULER.CREATE_JOB中设置max_run_duration

时间:2016-10-24 08:13:20

标签: oracle job-scheduling

今天我需要创建一个Job,并在运行时超过给定时间时将其终止。

我搜索并发现我需要为此意图设置属性max_run_duration

我的问题很简单:为什么我在创建工作时无法直接设置该属性?为什么我必须先创建作业然后再设置该属性,或者我可能做错了什么?

有人可以向我解释这个逻辑吗?

也许在较新版本的Oracle中添加了一些addition attributes,Oracle员工认为更改create_funtion然后为这些新属性添加set_attribute函数是不好的?< / p>

1 。错误脚本:(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;
/

2 。好的脚本:

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

1 个答案:

答案 0 :(得分:2)

检查文档CREATE_JOB Procedure

CREATE_JOB过程已重载,但6过程均未接受参数max_run_duration。您必须按照预期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;

但是,我没有管理它来创造一份工作。