创建作业
语法格式
sql
DBMS_SCHEDULER.CREATE_JOB (
job_name IN VARCHAR,
job_type IN VARCHAR,
job_action IN VARCHAR,
number_of_arguments IN INTEGER DEFAULT 0,
start_date IN TIMESTAMP DEFAULT NULL,
repeat_interval IN VARCHAR DEFAULT NULL,
end_date IN TIMESTAMP DEFAULT NULL,
job_class IN VARCHAR DEFAULT 'DEFAULT_JOB_CLASS',
enabled IN BOOLEAN DEFAULT FALSE,
auto_drop IN BOOLEAN DEFAULT TRUE,
comments IN VARCHAR DEFAULT NULL);
参数说明
job_name
:作业名称。job_type
:作业类型,可指定为stored_procedure
、plsql_block
或plsql_command
,plsql_block
和plsql_command
不能指定number_of_arguments
(参数个数),它们不能执行有参数的存储过程、函数和包。- 若为
stored_procedure
则job_action
内容为数据库存储过程名称。 - 若为
plsql_block
则job_action
为可执行块语句。 - 若为
plsql_command
则job_action
可调用包中的存储过程或存储函数。
- 若为
job_action
:作业动作,与job_type
相关。umber_of_arguments
:作业中存储过程、存储函数或包的参数个数。start_date
:作业开始时间,需小于作业结束时间,否则会报错。repeat_interval
:作业重复间隔说明。end_date
:作业结束时间,需大于作业开始时间并且大于等于系统当前时间,否则报错,如果给NULL则不会结束一直调度运行。job_class
:作业类型——该参数暂时无效,预留。enabled
:作业是否已激活,若该参数置为true则表示该作业默认为启用状态,作业根据其计划自动运行,若该参数置为false则该作业为禁用状态,不会自动执行,需手动执行作业或将该作业启用后方可自动执行。auto_drop
:作业执行完是否自动删除。若该参数置为true则在作业完成后将自动删除作业,反之不会删除该作业。comments
:作业备注说明。
repeat_interval说明
repeat_interval语法结构:
sql
REPEAT_INTERVAL => 'Freq=<time_period>; Interval=<integer>;
[BYHOUR=<hour_list>
| BYDAY=<day_list>
| BYMONTHDAY=<day_list>
| BYMONTH=<month_list>
| BYWEEKNO=<week_list>
| BYYEARDAY=<day_list>
| BYDATE=<date_list>
| BYMINUTE=<minute_list>
| BYSECOND=<second_list>]'
Freq
关键字用于指定作业间隔的时间周期,<time_period>
可选参数包括:YEARLY(年)、MONTHLY(月)、WEEKLY(周)、DAILY(日)、HOURLY(小时)、MINUTELY(分)、SECONDLY(秒)。Interval
关键字用于指定作业间隔频度,该值为一个整数,默认为1,可指定范围为1-999。BYHOUR
:指示定时作业在指定小时执行,可指定范围 0-23,若要指定多个时间参数使用逗号进行分割,如BYHOUR=2,5,7
。BYDAY
:指示在每周的第几天运行,可使用数字或英文缩写,如:MON|TUE|WED|THU|FRI|SAT|SUN
等。BYMONTHDAY
:指示在每月的第几天运行。BYMONTH
:指示在每年的月份,可使用数字或英文缩写,如:JAN|FEB|MAR|APR|MAY|JUN
等。BYWEEKNO
:指定在一年的哪一周运行,范围1-53。BYYEARDAY
:指定在一年的哪一天运行,范围1-366。BYDATE
:指定一年的哪一天运行,范围1-366,类型与BYYEARDAY
不同。BYMINUTE
:指定在小时内的哪一分钟运行,范围0-59。BYSECOND
:指定在分钟内的哪一秒运行,范围0-59。
示例
基于存储过程的定时作业
创建一个基于存储过程的定时作业,每天的5点与14点时,每隔30秒运行一次。
sql
CREATE TABLE JOB_TEST(ID INT,DT DATETIME);
CREATE OR REPLACE PROCEDURE JOB_PROC1(INPUT INTEGER) IS
BEGIN
INSERT INTO JOB_TEST VALUES (INPUT, SYSDATE);
END;
EXEC dbms_scheduler.create_job(
'job1',
'stored_procedure',
'JOB_PROC1',
1,
sysdate,
'freq=secondly;INTERVAL=30;byhour=5,14;',
'2029-01-01 01:00:00',
'default_class',
FALSE,
TRUE,
'这是一个测试');
基于PLSQL块语句的定时作业
创建一个基于PLSQL块语句的定时作业,该定时作业在每天的5点与14点时,每隔30秒运行一次。
sql
EXEC dbms_scheduler.create_job('job2',
'plsql_block',
'DECLARE BEGIN FOR i IN 1..10 LOOP INSERT INTO JOB_TEST VALUES(i,sysdate);END LOOP;END;',
0,
sysdate,
'freq=secondly;INTERVAL=30;byhour=5,14;',
'2029-01-01 01:00:00',
'default_class',
FALSE,
TRUE,
'这是一个测试');