Oracle创建定时器及其相关用法

发布时间 2023-03-24 20:14:23作者: 每天进步多一点

(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点执行