甲骨文调用带有参数的工作(Oracle Calling a job with arguments)

2019-10-18 10:07发布

我有一个存储过程parse_data包含3个参数里面全是数字。 我已创建了三个参数的程序,然后工作将运行存储过程。 代码如下所示:

BEGIN
  dbms_scheduler.create_program(program_name        => 'PARSE_PROGRAM',
                          program_type        => 'STORED_PROCEDURE',                                                          
                          program_action      => 'parse_data', 
                          number_of_arguments => 3,
                          enabled             => false,
                          comments            => '');

  dbms_scheduler.define_program_argument(program_name      => 'PARSE_PROGRAM',
                                   argument_name     => 'file_id',
                                   argument_position => 1,
                                   argument_type     => 'NUMBER',
                                   default_value     => '');

  dbms_scheduler.define_program_argument(program_name      => 'PARSE_PROGRAM',
                                   argument_name     => 'file_upload_id',
                                   argument_position => 2,
                                   argument_type     => 'NUMBER',
                                   default_value     => '');    

  dbms_scheduler.define_program_argument(program_name      => 'PARSE_PROGRAM',
                                   argument_name     => 'type_id',
                                   argument_position => 3,
                                   argument_type     => 'NUMBER',
                                   default_value     => '');                                       

  dbms_scheduler.enable (name => 'PARSE_PROGRAM');

  dbms_scheduler.create_job(job_name        => 'parse_job',
                          program_name    => 'PARSE_PROGRAM',
                          start_date      => systimestamp);

 END;

我的问题是,现在这个SQL已运行,程序和工作现在在DBMS,实际上,我怎么打这个电话运行作业,并通过在3个参数?

Answer 1:

您应该首先创建的作业,然后定义参数,然后运行它。 当你创建,启用属性附加伤害设置为false,所以它会尚未运行:

dbms_scheduler.create_job(job_name        => 'parse_job',
                          program_name    => 'PARSE_PROGRAM',
                          start_date      => systimestamp,
                          enabled         => false );

然后传递参数的工作:

dbms_scheduler.set_job_argument_value(job_name => 'parse_job',
                                      argument_position => 1,
                                      argument_value => 1);

然后用电话启用它:

dbms_scheduler.enable('parse_job');


Answer 2:

begin
 sys.dbms_scheduler.create_job(job_name            => 'Your Job name',
                        job_type            => 'PLSQL_BLOCK',
                        job_action          => 'begin schema.packagename.procedurename(parametername=> parametervalue); end;',
                        start_date          => to_date('01-01-2015 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                        repeat_interval     => 'Freq=Monthly;Interval=1',
                        end_date            => to_date(null),
                        job_class           => 'DEFAULT_JOB_CLASS',
                        enabled             => false,
                        auto_drop           => true,
                        comments            => 'Job comment');
end;


文章来源: Oracle Calling a job with arguments