是否可以将命名参数传递给类型为 '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/