#DBMS_JOB

DBMS_JOB包提供了一组内置的存储过程,用于创建和管理定时任务。需要注意的是,调用这些存储过程所执行的对定时任务的所有操作,均只有在执行COMMIT后才会生效。

# SUBMIT

DBMS_JOB.SUBMIT(
	job OUT	BIGINT,
    what IN	VARCHAR,
    next_date IN DATE DEFAULT SYSDATE,
    interval IN	VARCHAR DEFAULT NULL,
    no_parse IN	BOOLEAN DEFAULT FALSE,
    instance IN	BINARY_INTEGER DEFAULT 0,
    force IN BOOLEAN DEFAULT FALSE);

SUBMIT程序用于创建一个新的定时任务,成功创建的定时任务将可以在DBA_JOBS/ALL_JOBS/USER_JOBS视图中查询。

参数 用途
job 系统为定时任务分配的对象ID,BIGINT类型。
what 定时任务要执行的PL/SQL文本,可以是匿名块或者存储过程,必须以分号结束。
next_date 定时任务下次执行的时间。
interval 表达式文本,用于计算定时任务下次执行的时间,表达式为NULL表示定时任务只执行一次。通过表达式计算出的时间必须为将来时间或者NULL。
no_parse 标识在创建定时任务时,是否需要解析what指定的PL/SQL文本,true表示不解析,false表示会解析校验。
instance 保留字段,使用缺省值。
force 保留字段,使用缺省值。

示例

--创建存储过程
CREATE OR REPLACE PROCEDURE job_proc IS
BEGIN
  INSERT INTO area VALUES (
  	TO_CHAR(SYSDATE, 'SS'),
  	'job',
  	'job example'
  	);
  COMMIT;
END;
/

DECLARE
  jobid BIGINT;
BEGIN
  DBMS_JOB.SUBMIT(jobid,
  	'begin job_proc; end;',
  	SYSDATE,
  	'SYSDATE+1'
  	);
  COMMIT;
  DBMS_OUTPUT.PUT_LINE('Job:'||jobid||' is created!'); 
END;
/

--result
Job:1681 is created!

# BROKEN

DBMS_JOB.BROKEN(
	job	IN BIGINT,
    broken IN BOOLEAN,
    next_date IN DATE DEFAULT SYSDATE);

BROKEN程序用于设置定时任务的停止标志,被停止的定时任务将不再被系统进行任务调度,需要注意的是,BROKEN程序不能作用于一个正在执行的定时任务。

参数 用途
job 定时任务的对象ID,可以通过DBA_JOBS/ALL_JOBS/USER_JOBS视图查询。
broken 是否停止定时任务,true表示停止,false表示不停止。
next_date 定时任务下次执行的时间。

示例

--停止JOB
EXEC DBMS_JOB.BROKEN(1681,true);
COMMIT;

--重启被停止的JOB
EXEC DBMS_JOB.BROKEN(1681,false);
COMMIT;

# CHANGE

DBMS_JOB.CHANGE(
	job IN BIGINT,
	what IN VARCHAR,
	next_date IN DATE,
	interval IN VARCHAR,
	instance IN INTEGER DEFAULT NULL,
	force IN BOOLEAN DEFAULT FALSE);

CHANGE程序用于修改定时任务的相关属性,其中,使用NULL参数值表示对属性仍保持原值。

参数 用途
job 定时任务的对象ID,可以通过DBA_JOBS/ALL_JOBS/USER_JOBS视图查询。
what 定时任务要执行的PL/SQL文本,可以是匿名块或者存储过程,必须以分号结束。
next_date 定时任务下次执行的时间。
interval 表达式文本,用于计算定时任务下次执行的时间,表达式为NULL表示定时任务只执行一次。通过表达式计算出的时间必须为将来时间或者NULL。
instance 保留字段,使用缺省值。
force 保留字段,使用缺省值。

示例

--修改JOB的执行间隔为1小时
EXEC DBMS_JOB.CHANGE(1681,'begin job_proc; end;',NULL,'SYSDATE+1/24');
COMMIT;

# INTERVAL

DBMS_JOB.INTERVAL(
	job IN BIGINT,
	interval IN VARCHAR);

INTERVAL程序用于修改定时任务执行的频率。

参数 用途
job 定时任务的对象ID,可以通过DBA_JOBS/ALL_JOBS/USER_JOBS视图查询。
interval 表达式文本,用于计算定时任务下次执行的时间,表达式为NULL表示定时任务只执行一次。通过表达式计算出的时间必须为将来时间或者NULL。

示例

--修改JOB的执行间隔为2小时
EXEC DBMS_JOB.INTERVAL(1681,'SYSDATE+1/12');
COMMIT;

# NEXT_DATE

DBMS_JOB.NEXT_DATE(
	job IN BIGINT,
	next_date IN DATE);

NEXT_DATE程序用于修改定时任务下次执行的时间。

参数 用途
job 定时任务的对象ID,可以通过DBA_JOBS/ALL_JOBS/USER_JOBS视图查询。
next_date 定时任务下次执行的时间。

示例

--修改JOB的下次执行时间为1分钟后
EXEC DBMS_JOB.NEXT_DATE(1681,SYSDATE+1/24/60);
COMMIT;

# RUN

DBMS_JOB.RUN(
	job IN BIGINT,
	force IN BOOLEAN DEFAULT FALSE);

RUN程序用于手动执行一次定时任务。定时任务的状态会变为RUNNING,无法通过STOP_JOB接口停止。

参数 用途
job 定时任务的对象ID,可以通过DBA_JOBS/ALL_JOBS/USER_JOBS视图查询。
force 保留字段,使用缺省值。

示例

EXEC DBMS_JOB.RUN(1681);
COMMIT;

# WHAT

DBMS_JOB.WHAT(
	job IN BIGINT,
	what IN VARCHAR);

WHAT程序用于修改定时任务的执行内容。

参数 用途
job 定时任务的对象ID,可以通过DBA_JOBS/ALL_JOBS/USER_JOBS视图查询。
what 定时任务要执行的PL/SQL文本,可以是匿名块或者存储过程,必须以分号结束。

示例

EXEC DBMS_JOB.WHAT(1681,'begin job_proc; commit; end;');
COMMIT;

# REMOVE

DBMS_JOB.REMOVE(
	job IN BIGINT);

REMOVE程序用于删除一个非执行状态下的定时任务,执行删除后将无法在DBA_JOBS/ALL_JOBS/USER_JOBS视图中查询到该定时任务数据。

参数 用途
job 定时任务的对象ID,可以通过DBA_JOBS/ALL_JOBS/USER_JOBS视图查询。

示例

EXEC DBMS_JOB.REMOVE(1681);
COMMIT;
pdf-btn 下载文档
copy-btn 复制链接