【问题标题】:Oracle Calling a job with argumentsOracle 使用参数调用作业
【发布时间】:2013-07-30 13:51:40
【问题描述】:

我有一个存储过程 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 个参数?

【问题讨论】:

    标签: oracle plsql oracle11g oracle10g


    【解决方案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');
    

    【讨论】:

      【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-28
        • 2018-11-11
        • 1970-01-01
        • 2019-10-29
        • 2015-09-10
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        相关资源
        最近更新 更多