今天我需要创建一个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;
/
答案 0 :(得分:2)
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;
但是,我没有管理它来创造一份工作。