现有一个参数为date类型的存储:
create or replace procedure t_pro(t_var in date) as begin dbms_output.put_line(TO_CHAR(T_VAR,'YYYY')); --dbms_output.put_line(T_VAR); end;
job的实现代码为:
begin dbms_scheduler.create_job( job_name => 'FFFF', job_type => 'STORED_PROCEDURE', //表示该job执行的是一个存储过程类型 job_action => '"Schema"."Procedure"', //表示执行的是哪一个存储过程(说白了就是存储的名字),该存储过程不能有输入输出参数和输出参数。 number_of_arguments => 1, //该job的执行程序的参数个数为 1 repeat_interval => 'FREQ=DAILY;INTERVAL=3', //表示每天的3点为执行该job的时间 enabled => FALSE //表示是否启用该job,注意大小写 ); end;
job定义完成后,就要给该job的参数设定值了:
begin DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE ( job_name => 'FFFF', argument_position => 1, argument_value => SYSDATE ); end;
参数 argument_position => 1 表示的是 该job的参数的位置,如果job中参数有多个,写为2,3,4....依次递增1。注意:如有多个参数需要制定需要这样写
begin DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE ( job_name => 'FFFF', argument_position => 1, argument_value => SYSDATE ); DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE ( job_name => 'FFFF', argument_position => 2, argument_value => val2 ); DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE ( job_name => 'FFFF', argument_position => 3, argument_value => val3 ); ...... end;
job的参数设置,支持varchar2和date类型参数
启用job和执行job:
EXEC DBMS_SCHEDULER.ENABLE('FFFF'); EXEC DBMS_SCHEDULER.RUN_JOB('FFFF');