2

我有一个存储过程 parse_data,它需要 3 个参数,这些参数都是 NUMBER。我创建了一个带有三个参数的程序,然后创建了一个运行存储过程的作业。代码如下所示:

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 个参数?

4

2 回答 2

4

您应该首先创建作业,然后定义参数,然后运行它。创建它时,将启用的属性设置为 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');
于 2013-07-30T14:30:14.673 回答
0
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;
于 2018-06-01T09:32:20.533 回答