#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;