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

发布于 2024-12-19 10:48:20 字数 714 浏览 5 评论 0原文

假设我有 2 个程序:MYPROC1 和 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)' 使其无法工作。 错误:..数据库对象名称无效...

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

So say I have 2 procedures: MYPROC1 & MYPROC2(A_PARAM INTEGER)

this works:

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;

replacing line 5 with:

job_action => 'developer.MYPROC1(2)' makes it not work.
Error: ..invalid name for a database object...

So how do I call from a scheduler a parametrized procedure? Whats the syntax?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

暮色兮凉城 2024-12-26 10:48:20

使用 job_type => 'PLSQL_BLOCK',job_action => '开始开发者.MYPROC1(2); END;' 相反。

use job_type => 'PLSQL_BLOCK', job_action => 'BEGIN developer.MYPROC1(2); END;' instead.

眼泪也成诗 2024-12-26 10:48:20

保留您的 job_action 参数不变(不带参数),并将 number_of_arguments 选项添加到您的过程需要的参数的数字中。

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

示例如下:使用作业

Leave your job_action parameter as it is (without the arguments), and add the number_of_arguments option to the number if parameters your procedure expects.

You can then use DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE to set the argument values.

Examples here: Using jobs.

终难遇 2024-12-26 10:48:20
  • 首先,使用DBMS_SCHEDULER.CREATE_JOB创建调度程序作业而不启用(默认为 false,已经),然后应该启用它来运行。
  • 最好将 job_name 参数定义为连续作业名称的绑定变量。
  • job_name 参数不必是大写,但在查询调度程序运行历史记录时,请从特权模式中使用大写的 job_name 的所有字母来调用它:< /p>

    <前><代码>选择*
    来自 dba_scheduler_job_log l
    其中 l.job_name = 'TEST_SCHEDULER'
    按 l.log_date desc 排序;

  • 忘记在作业创建命令中包含number_of_arguments(在本例中它等于1)参数。

  • 正如Mat告诉您可以使用DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE,如下例所示(还将argument value参数定义为值为2 就像你的情况一样):

    <前><代码>开始
    DBMS_SCHEDULER.CREATE_JOB(
    工作名称=> '&v_job_name', -- tEst_sCheDuLEr
    工作类型=> 'STORED_PROCEDURE',
    job_action =>; '开发人员.MYPROC1',
    number_of_arguments =>; 1、
    开始日期 => '2018 年 4 月 4 日上午 10:30:00',
    重复间隔=> '频率=第二;间隔=3;',
    结束日期=> '2018 年 4 月 4 日上午 10:45:00',
    自动删除=>错误的,
    评论=> '测试 1');

    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
    工作名称=> '&v_job_name',
    参数位置 => 1、
    参数值=> &vl--2
    );

    DBMS_SCHEDULER.ENABLE('&v_job_name');
    结尾;

如果您收到 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 参数。

  • Firsly, create your scheduler job by using DBMS_SCHEDULER.CREATE_JOB without enabling (default is false, already), and then that should be enabled to run.
  • It' nice to define job_name parameter as a bind variable for consecutive job names.
  • job_name parameter needn't to be in upper cases, but when querying scheduler run history, call it with all letters of job_name in upper from a privileged schema :

    select * 
      from dba_scheduler_job_log l
     where l.job_name = 'TEST_SCHEDULER'
     order by l.log_date desc;
    
  • Don't forget to include number_of_arguments(for this case it equals 1) parameter for your job creation command.

  • As Mat tells you may use DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE like in the following example ( also define argument value parameter as a bind variable with value 2 as in your case ) :

    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;
    

If you get ORA-01882 Timezone region not found error, then

to_timestamp_tz('04-APR-2018 10:30:00 EST', 'DD-MON-YYYY HH24:MI:SS TZR')
or to_date('04.04.2018 10:30:00', 'DD.MM.YYYY HH24:MI:SS')
format may be used for start_date parameter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文