Oracle创建定时器及其相关用法
(1). 首先创建一个存储过程,即需要定时执行的任务内容
create or replace procedure 存储过程名 as begin 执行内容; commit; end;
例定时修改某个表信息:
create or replace procedure AUTO_MODIFY_GI as begin update material_operation_record_info m set m.issuedate = m.issuedate - 1, m.flag_id = '0' where m.flag_id = '1' and m.issuedate >= to_date('2022-08-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and m.issuedate < to_date('2022-08-31 08:30:00', 'yyyy-mm-dd hh24:mi:ss'); commit; end;
(2). 创建调度任务
declare job number; BEGIN DBMS_JOB.SUBMIT( JOB => job, /*自动生成JOB_ID*/ WHAT => '存储过程名;', /*需要执行的存储过程名称或SQL语句*/ NEXT_DATE => sysdate+3/(24*60), /*初次执行时间-下一个3分钟*/ INTERVAL => 'trunc(sysdate,''mi'')+5/(24*60)' /*每隔5分钟执行一次*/ ); commit; end;
例每隔5分钟执行一次操作:
declare job number; BEGIN DBMS_JOB.SUBMIT(JOB => job, /*自动生成JOB_ID*/ WHAT => 'AUTO_MODIFY_GI;', /*需要执行的存储过程名称或SQL语句*/ NEXT_DATE => sysdate + 3 / (24 * 60), /*初次执行时间-下一个3分钟*/ INTERVAL => 'trunc(sysdate,''mi'')+5/(24*60)' /*每隔5分钟执行一次*/); commit; end;
(3). job相关操作
1、定时任务查询
-- 查看正在执行的调度任务 select * from dba_jobs_running; -- 查看执行完的调度任务 select * from dba_jobs;
2、手动启动定时任务
begin dbms_job.run(24); commit; end;
3、暂停正在启动的定时任务
begin dbms_job.broken(24, TRUE, SYSDATE); commit; end;
4、删除正在执行的定时任务
begin dbms_job.remove(23); commit; end;
5、修改定时任务间隔时间
begin dbms_job.interval(24, 'sysdate + 6 / (24 * 60)'); commit; end;
6、修改定时任务下次执行时间
begin dbms_job.next_date(24, sysdate + 10 / (24 * 60)); commit; end;
7、修改定时任务执行操作
begin dbms_job.what(24, 'AUTO_MODIFY_GI_DATA;'); --修改某个job名 commit; end;
8、执行时间参考如下
TRUNC(SYSDATE,'mi') + 1/(24*60)--每分钟执行 TRUNC(SYSDATE,'mi') + 5/(24*60)--每五分钟执行 TRUNC(SYSDATE,'mi') + 1/24--每小时执行 TRUNC(SYSDATE,'mi') + 5/24--每隔五小时执行 TRUNC(SYSDATE) + 1 +2/(24)--每天的凌晨2点执行 TRUNC(SYSDATE) + 5 +2/(24)--每隔5天的凌晨2点执行 TRUNC(NEXT_DAY(SYSDATE,2))+2/24 --星期一(一周的第二天)--每周一凌晨2点执行 TRUNC(NEXT_DAY(SYSDATE,7))+2/24 --星期六(一周的第七天)--每周六凌晨2点执行 TRUNC(LAST_DAY(SYSDATE))+1+2/24--每月1日凌晨2点执行 TRUNC(LAST_DAY(SYSDATE))+5+10/24--每月5日上午10点执行 TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24--每季度的第一天凌晨2点执行