stored-procedures - 为 Oracle dbms_scheduler 作业存储过程设置命名参数

标签 stored-procedures plsql oracle10g named-parameters dbms-scheduler

是否可以将命名参数传递给类型为 'stored_procedure' 的 dbms_scheduler 作业?我试过这种方式:

-- 1) example dummy procdure
CREATE OR REPLACE PROCEDURE my_test_proc (
 param1 IN NVARCHAR2,
 param2 IN NUMBER,
 param3 IN NUMBER
) IS
BEGIN
-- ...
END;

-- 2)Example dummy job:
BEGIN    
    dbms_scheduler.create_job(
        job_name => 'my_test_job'
        ,job_type => 'STORED_PROCEDURE'
        ,job_action => 'my_test_proc'
        ,start_date => sysdate
        ,number_of_arguments => 3
        ,enabled => FALSE
        ,auto_drop =>FALSE
    );
END;
-- 3)Set named param value:
BEGIN  
    dbms_scheduler.set_job_argument_value(
        job_name => 'my_test_job'
        ,argument_name => 'param1' 
        ,argument_value => 'some value'
    );
END;  

我收到以下错误:
甲骨文

-27484: Argument names are not supported for jobs without a program. ORA-06512: at "SYS.DBMS_ISCHED", line 207 ORA-06512: at "SYS.DBMS_SCHEDULER", line 602 ORA-06512: at line 2



我通过使用argument_position 设置成功地使用set_job_argument_value 设置了参数值。但是在某些情况下,我需要运行存储过程,我只需要为其设置某些参数,而这是行不通的。有没有办法将命名参数传递给调度程序作业运行的存储过程?

最佳答案

由于错误状态,首先创建一个程序,然后在该工作。

dbms_scheduler.create_program(program_name        => 'YOUR_PROGRAM',
                              program_type        => 'STORED_PROCEDURE',                                                          
                              program_action      => 'my_test_proc', 
                              number_of_arguments => 2,
                              enabled             => false,
                              comments            => 'Comments you want');

dbms_scheduler.define_program_argument(program_name      => 'YOUR_PROGRAM',
                                       argument_name     => 'param1',
                                       argument_position => 1,
                                       argument_type     => 'VARCHAR2',
                                       default_value     => '');
    ..etc, do for all 3.                                         

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


dbms_scheduler.create_job(job_name        => 'my_test_job',
                          program_name    => 'YOUR_PROGRAM',
                          start_date      => systimestamp,
                          end_date        => null,
                          ...

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

关于stored-procedures - 为 Oracle dbms_scheduler 作业存储过程设置命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14454691/

相关文章:

oracle - 调用另一个 Oracle 包中的过程/函数的开销

sql - 如何从数据库表中的重复行中选择具有最新时间戳的行?

postgresql - 使用触发器/函数计算 postgresql 上的利息

sql - 存储过程逻辑错误

java - 在 Oracle 上调用存储过程抛出 ORA-06550 异常

sql - 您可以使用 CASE 语句来评估您传递给存储过程的参数吗?

html - 从 PL/SQL 生成 HTML

oracle - PLSQL:输出多个游标的过程

oracle - Oracle 10g 如何计算 boolean 表达式中的 NULL

oracle - 在用户定义类型的 oracle 中插入/更新/选择值