Oacle sched.jobs的arguments怎么加
时间: 2024-03-16 18:41:39 浏览: 144
在Oracle中,使用DBMS_SCHEDULER创建定时任务时,可以通过arguments参数向任务传递参数。具体方法如下:
1. 在创建定时任务时,使用CREATE_JOB或CREATE_PROGRAM语句,设置arguments参数为一个字符串数组,例如:
```
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'my_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN my_procedure(:arg1, :arg2); END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=DAILY; INTERVAL=1',
enabled => TRUE,
comments => 'This is my job',
auto_drop => TRUE,
arguments => SYS.SCHEDULER$_STRING_ARRAY('arg1_value', 'arg2_value')
);
END;
```
在上面的例子中,arguments参数的值是一个字符串数组,包含了两个参数arg1_value和arg2_value。
2. 在任务的PL/SQL代码中,可以通过使用DBMS_SCHEDULER.GET_JOB_ARGUMENT_VALUE函数获取传递的参数值,例如:
```
CREATE OR REPLACE PROCEDURE my_procedure (
arg1 IN VARCHAR2,
arg2 IN VARCHAR2
) AS
v_arg1 VARCHAR2(100);
v_arg2 VARCHAR2(100);
BEGIN
v_arg1 := DBMS_SCHEDULER.GET_JOB_ARGUMENT_VALUE(job_name => 'my_job', argument_position => 1);
v_arg2 := DBMS_SCHEDULER.GET_JOB_ARGUMENT_VALUE(job_name => 'my_job', argument_position => 2);
-- do something with v_arg1 and v_arg2
END;
```
在上面的例子中,GET_JOB_ARGUMENT_VALUE函数可以获取传递的参数值,参数job_name指定了任务名称,argument_position指定了参数在arguments数组中的位置。
需要注意的是,arguments参数只能传递字符串类型的参数值,如果需要传递其他类型的参数,可以将其转换为字符串类型再传递。
阅读全文