Skip to content

创建作业

语法格式

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_procedureplsql_blockplsql_commandplsql_blockplsql_command不能指定number_of_arguments(参数个数),它们不能执行有参数的存储过程、函数和包。
    • 若为stored_procedurejob_action内容为数据库存储过程名称。
    • 若为plsql_blockjob_action为可执行块语句。
    • 若为plsql_commandjob_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,
  '这是一个测试');