所以说我有两个程序:MYPROC1& MYPROC2(A_PARAM INTEGER)
这有效:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'TEST_SCHEDULER',
job_type => 'STORED_PROCEDURE',
job_action => 'developer.MYPROC1', <<<<<<<<<<<<<<<
start_date => TIMESTAMP'2011-12-4 10:30:00',
repeat_interval => 'FREQ=SECONDLY;INTERVAL=30',
end_date => TIMESTAMP'2011-12-4 10:45:00',
auto_drop => FALSE,
comments => 'TEST 1');
END;
将第5行替换为:
job_action => 'developer.MYPROC1(2)'
使其失效。
错误:..数据库对象的名称无效...
那么如何从调度程序中调用参数化过程?什么是语法?
答案 0 :(得分:4)
改为使用job_type => 'PLSQL_BLOCK', job_action => 'BEGIN developer.MYPROC1(2); END;'
。
答案 1 :(得分:2)
保持job_action
参数不变(不带参数),如果参数需要参数,请将number_of_arguments
选项添加到数字中。
然后,您可以使用DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE
设置参数值。
此处的示例:Using jobs。
答案 2 :(得分:0)
DBMS_SCHEDULER.CREATE_JOB
创建调度程序作业而不启用(默认为false),然后启用它才能运行。job_name
参数定义为连续作业名称的绑定变量很好。 job_name
参数不需要处于大写状态,但在查询调度程序运行历史记录时,请使用特权架构中的所有字母job_name
调用它:
select *
from dba_scheduler_job_log l
where l.job_name = 'TEST_SCHEDULER'
order by l.log_date desc;
不要忘记为作业创建命令添加number_of_arguments
(对于本例,它等于1
)参数。
正如Mat所说,您可以在以下示例中使用DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE
(也可以将argument value
参数定义为值2
的绑定变量,如您所示:)
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => '&v_job_name', -- tEst_sCheDuLEr
job_type => 'STORED_PROCEDURE',
job_action => 'developer.MYPROC1',
number_of_arguments => 1,
start_date => '04-apr-2018 10:30:00 am',
repeat_interval => 'FREQ=SECONDLY;INTERVAL=3;',
end_date => '04-apr-2018 10:45:00 am',
auto_drop => false,
comments => 'TEST 1');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
job_name => '&v_job_name',
argument_position => 1,
argument_value => &vl -- 2
);
DBMS_SCHEDULER.ENABLE('&v_job_name');
END;
如果您找不到 ORA-01882
时区区域错误,那么
to_timestamp_tz('04-APR-2018 10:30:00 EST', 'DD-MON-YYYY HH24:MI:SS TZR')
或to_date('04.04.2018 10:30:00', 'DD.MM.YYYY HH24:MI:SS')
格式可用于start_date
参数。