在Oracle调度程序中向被调用过程添加参数的语法是什么?

时间:2011-12-04 09:33:03

标签: oracle syntax scheduler

所以说我有两个程序:MYPROC1& MYPROC2(A_PARAM INTEGER)

这有效:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
        job_name => 'TEST_SCHEDULER',
        job_type => 'STORED_PROCEDURE',
        job_action => 'developer.MYPROC1', <<<<<<<<<<<<<<<
        start_date => TIMESTAMP'2011-12-4 10:30:00',
                repeat_interval => 'FREQ=SECONDLY;INTERVAL=30',
        end_date => TIMESTAMP'2011-12-4 10:45:00',
        auto_drop => FALSE,
        comments => 'TEST 1');
END;

将第5行替换为:

job_action => 'developer.MYPROC1(2)'使其失效。 错误:..数据库对象的名称无效...

那么如何从调度程序中调用参数化过程?什么是语法?

3 个答案:

答案 0 :(得分:4)

改为使用job_type => 'PLSQL_BLOCK', job_action => 'BEGIN developer.MYPROC1(2); END;'

答案 1 :(得分:2)

保持job_action参数不变(不带参数),如果参数需要参数,请将number_of_arguments选项添加到数字中。

然后,您可以使用DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE设置参数值。

此处的示例:Using jobs

答案 2 :(得分:0)

  • 首先,使用DBMS_SCHEDULER.CREATE_JOB创建调度程序作业而不启用(默认为false),然后启用它才能运行。
  • job_name参数定义为连续作业名称的绑定变量很好。
  • job_name参数不需要处于大写状态,但在查询调度程序运行历史记录时,请使用特权架构中的所有字母job_name调用它:

    select * 
      from dba_scheduler_job_log l
     where l.job_name = 'TEST_SCHEDULER'
     order by l.log_date desc;
    
  • 不要忘记为作业创建命令添加number_of_arguments(对于本例,它等于1)参数。

  • 正如Mat所说,您可以在以下示例中使用DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(也可以将argument value参数定义为值2的绑定变量,如您所示:)

    BEGIN  
     DBMS_SCHEDULER.CREATE_JOB(
         job_name => '&v_job_name', -- tEst_sCheDuLEr
         job_type => 'STORED_PROCEDURE',
         job_action => 'developer.MYPROC1', 
         number_of_arguments => 1,
         start_date => '04-apr-2018 10:30:00 am',
         repeat_interval => 'FREQ=SECONDLY;INTERVAL=3;',
         end_date => '04-apr-2018 10:45:00 am',
         auto_drop => false,
         comments => 'TEST 1');
    
     DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
         job_name => '&v_job_name', 
         argument_position => 1,
         argument_value => &vl -- 2
         );
    
     DBMS_SCHEDULER.ENABLE('&v_job_name');    
    END;
    

如果您找不到 ORA-01882时区区域错误,那么

to_timestamp_tz('04-APR-2018 10:30:00 EST', 'DD-MON-YYYY HH24:MI:SS TZR')to_date('04.04.2018 10:30:00', 'DD.MM.YYYY HH24:MI:SS') 格式可用于start_date参数。