Oracle 创建定时任务 DBMS_JOB

发布时间 2023-04-21 10:31:22作者: DeepInThought

需求:创建一个每天凌晨一点执行的任务(存储过程)

1、创建存储过程

-- 一般存储过程语法
CREATE OR REPLACE PROCEDURE UPDATE_LABEL_TABLE_DATE_DT IS
BEGIN
	UPDATE IC_CO_BAE_INFO SET DT = TO_CHAR(TRUNC(SYSDATE-1), 'yyyy-MM-dd');
	UPDATE IC_RG_RRG_INFO_V1 SET DT = TO_CHAR(TRUNC(SYSDATE-1), 'yyyy-MM-dd');
	UPDATE IC_VE_CAT_INFO SET DT = TO_CHAR(TRUNC(SYSDATE-1), 'yyyy-MM-dd');
END;

2、创建定时任务

-- dbms_job.submit(作业名, '存储过程名;', 定时类型, 任务执行时间点);
DECLARE UPDATE_LABEL_TABLE_DATE_DT_JOB NUMBER;
BEGIN
	dbms_job.submit( UPDATE_LABEL_TABLE_DATE_DT_JOB, 'UPDATE_LABEL_TABLE_DATE_DT;', SYSDATE, 'sysdate+5/86400' );
commit;
END;

-- 查看创建的定时任务(dydsba查看表:dba_jobs)
select * from user_jobs;

4、启动定时任务

-- 1、获取当前作业job ID,假设为:3
select job from user_jobs where WHAT='UPDATE_LABEL_TABLE_DATE_DT;'
-- 2、执行job任务
begin
  dbms_job.run(3);
  commit;
end;

5、停止定时任务

begin
  dbms_job.broken(3, true);
  commit;
end;

6、修改定时任务

-- 1、修改定时任务时间:改为每日凌晨一点执行
-- // TODO dbms_job.interval  语法详解
begin
  dbms_job.interval(3, 'TRUNC(sysdate) + 1 +1/(24)');
  commit;
end;

7、删除定时任务

begin
  dbms_job.remove(3,);
  commit;
end;