使用参数创建dbms_scheduler.create_job

时间:2015-03-26 19:42:02

标签: database oracle scheduler

我正在尝试使用带参数的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

不确定我错过了什么。非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:3)

问题在于脚本中的这一行:

enabled=>TRUE,

这意味着作业会在创建后立即启用。但是,此时您还没有设置参数。因此错误。

所以你需要做的是设置enabled=>FALSE(这实际上是the default for CREATE_JOB())。在调用SET_ARGUMENT启用它之后,您已经调用了ENABLE()作业,因此您的代码现在可以正常工作。