#DBMS_IJOB
DBMS_IJOB包提供了一组内置的存储过程,用于对指定用户创建和管理定时任务。需要注意的是,调用这些存储过程所执行的对定时任务的所有操作,均只有在执行COMMIT后才会生效。
# SUBMIT
DBMS_IJOB.SUBMIT(
JOB OUT BINARY_INTEGER
LUSER IN VARCHAR2,
PUSER IN VARCHAR2,
CUSER IN VARCHAR2 DEFAULT CURUSER,
NEXT_DATE IN DATE DEFAULT SYSDATE,
INTERVAL IN VARCHAR DEFAULT NULL,
BROKEN IN BOOLEAN DEFAULT FALSE,
WHAT IN VARCHAR2 NOT NULL
CS_LAB IN VARCHAR2,
CS_HI IN VARCHAR2,
CS_LO IN VARCHAR2,
NLSENV IN VARCHAR2,
ENV IN VARCHAR2,
);
SUBMIT程序可以给指定的用户创建一个新的定时任务,成功创建的定时任务将可以在DBA_JOBS/ALL_JOBS/USER_JOBS视图中查询。
Note:
本程序只能被如下用户调用执行:
- SYS用户
- DBA角色的用户
- 拥有all privileges权限的用户
参数 | 描述 |
---|---|
JOB | 创建的任务编号 |
LUSER | 选填,不生效 |
PUSER | 选填,不生效 |
CUSER | 任务执行的角色,默认获取当前登录用户 |
NEXT_DATE | 定时任务下次执行的时间,默认立即执行 |
INTERVAL | 表达式文本,用于计算定时任务下次执行的时间,表达式为NULL表示定时任务只执行一次。通过表达式计算出的时间必须为将来时间或者NULL |
BROKEN | 任务是否中断,默认FLASE |
WHAT | 定时任务要执行的PL文本,可以是匿名块或者存储过程,必须以分号结束 |
CS_LAB | 选填,不生效 |
CS_HI | 选填,不生效 |
CS_LO | 选填,不生效 |
NLSENV | 选填,不生效 |
ENV | 选填,不生效 |
示例
-- 在SALES用户下创建存储过程
CREATE TABLE tbl_job(id VARCHAR2(30), name VARCHAR2(30));
CREATE OR REPLACE PROCEDURE proce_t IS
BEGIN
INSERT INTO tbl_job(id, name)
VALUES('1', TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss'));
COMMIT;
END proce_t;
/
-- 以SYS用户执行,为SALES用户创建JOB
DECLARE
job_id INT;
BEGIN
SYS.DBMS_IJOB.SUBMIT(
job_id,
cuser=>'SALES',
INTERVAL=> 'sysdate+1/24/60',
what=> 'proce_t;');
COMMIT;
END;
/
-- 在SALES用户下查看job运行结果:每分钟插入一条数据
SELECT ID,NAME FROM tbl_job;
ID NAME
--------------------------------- ---------------------------------
1 2022-11-08 19:50:57
1 2022-11-08 19:51:57
1 2022-11-08 19:52:57
1 2022-11-08 19:53:57
-- 在SALES用户下删除JOB(从user_jobs视图获取该JOB的ID)
exec DBMS_JOB.REMOVE(1925);
COMMIT;