在Oracle调度程序中向被调用过程添加参数的语法是什么?
假设我有 2 个程序:MYPROC1 和 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)'
使其无法工作。 错误:..数据库对象名称无效...
那么如何从调度程序调用参数化过程?语法是什么?
So say I have 2 procedures: MYPROC1 & MYPROC2(A_PARAM INTEGER)
this works:
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;
replacing line 5 with:
job_action => 'developer.MYPROC1(2)'
makes it not work.
Error: ..invalid name for a database object...
So how do I call from a scheduler a parametrized procedure? Whats the syntax?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用 job_type => 'PLSQL_BLOCK',job_action => '开始开发者.MYPROC1(2); END;' 相反。
use
job_type => 'PLSQL_BLOCK', job_action => 'BEGIN developer.MYPROC1(2); END;'
instead.保留您的
job_action
参数不变(不带参数),并将number_of_arguments
选项添加到您的过程需要的参数的数字中。然后,您可以使用
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE
设置参数值。示例如下:使用作业。
Leave your
job_action
parameter as it is (without the arguments), and add thenumber_of_arguments
option to the number if parameters your procedure expects.You can then use
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE
to set the argument values.Examples here: Using jobs.
DBMS_SCHEDULER.CREATE_JOB
创建调度程序作业而不启用(默认为 false,已经),然后应该启用它来运行。job_name
参数定义为连续作业名称的绑定变量。job_name
参数不必是大写,但在查询调度程序运行历史记录时,请从特权模式中使用大写的job_name
的所有字母来调用它:< /p><前><代码>选择*
来自 dba_scheduler_job_log l
其中 l.job_name = 'TEST_SCHEDULER'
按 l.log_date desc 排序;
number_of_arguments
(在本例中它等于1
)参数。正如Mat告诉您可以使用
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE
,如下例所示(还将argument value
参数定义为值为2 就像你的情况一样):
<前><代码>开始
DBMS_SCHEDULER.CREATE_JOB(
工作名称=> '&v_job_name', -- tEst_sCheDuLEr
工作类型=> 'STORED_PROCEDURE',
job_action =>; '开发人员.MYPROC1',
number_of_arguments =>; 1、
开始日期 => '2018 年 4 月 4 日上午 10:30:00',
重复间隔=> '频率=第二;间隔=3;',
结束日期=> '2018 年 4 月 4 日上午 10:45:00',
自动删除=>错误的,
评论=> '测试 1');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
工作名称=> '&v_job_name',
参数位置 => 1、
参数值=> &vl--2
);
DBMS_SCHEDULER.ENABLE('&v_job_name');
结尾;
如果您收到
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
参数。DBMS_SCHEDULER.CREATE_JOB
without enabling (default is false, already), and then that should be enabled to run.job_name
parameter as a bind variable for consecutive job names.job_name
parameter needn't to be in upper cases, but when querying scheduler run history, call it with all letters ofjob_name
in upper from a privileged schema :Don't forget to include
number_of_arguments
(for this case it equals1
) parameter for your job creation command.As Mat tells you may use
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE
like in the following example ( also defineargument value
parameter as a bind variable with value2
as in your case ) :If you get
ORA-01882
Timezone region not found error, thento_timestamp_tz('04-APR-2018 10:30:00 EST', 'DD-MON-YYYY HH24:MI:SS TZR')
or
to_date('04.04.2018 10:30:00', 'DD.MM.YYYY HH24:MI:SS')
format may be used for
start_date
parameter.