我正在尝试使用带参数的dbms_scheduler.create_job创建一个简单的作业。以下是我创建工作的简单过程:
create or replace procedure SCRIPT_DBMS_SCHEDULER
as
v_text varchar2(255):='Parameter passed from Oracle to Linux';
l_job_exists number;
Begin
select count(*) into l_job_exists
from user_scheduler_jobs
where job_name = 'script_dbms_scheduler_test';
if l_job_exists = 1 then
dbms_scheduler.drop_job(job_name => 'script_dbms_scheduler_test');
end if;
dbms_output.put_line('I am in Procedure');
dbms_scheduler.create_job
(job_name=>'script_dbms_scheduler_test',
job_action=>'/data/home/workflow/script_dbms_scheduler.ksh',
job_type=>'executable',
number_of_arguments=>1,
enabled=>TRUE,
auto_drop => TRUE,
comments=> 'Run shell-script script_dbms_scheduler.ksh');
dbms_scheduler.set_job_argument_value(job_name =>'script_dbms_scheduler_test', argument_position => 1, argument_value => v_text);
dbms_scheduler.enable('script_dbms_scheduler_test');
dbms_output.put_line('I am back in Procedure');
Exception
when others then
dbms_output.put_line(sqlcode||sqlerrm);
end;
当参数为0时,它工作正常。但是,当我尝试传递至少1个参数时,出现以下错误:
ORA-27457: argument 1 of job "IITWFU.SCRIPT_DBMS_SCHEDULER_TEST" has no value
不知道我在想什么。任何帮助深表感谢。
谢谢
问题是脚本中的这一行:
enabled=>TRUE,
这意味着作业在创建后立即启用。但是,此时您尚未设置参数。因此,错误。
因此,您需要做的就是设置enabled=>FALSE
(这实际上是CREATE_JOB()的默认值)。在调用SET_ARGUMENT启用作业之后,您已经可以调用ENABLE()作业,因此您的代码现在应该可以工作了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句