Oracle 简单的创建一个定时任务job

Oracle 简单的创建一个定时任务job

Oracle 简单的创建一个定时任务job

没有什么前置步骤,无非就是把存储过程或者SQL提前写好,就不说了,直接执行一下下面的语句即可创建一个job

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  /*自动生成JOB_ID,放着就行,不用管*/  
        WHAT => 'send_email_main;',  /*换成你需要执行的存储过程名称或SQL,如果是包则要具体到方法*/ 
        NEXT_DATE => sysdate+1/(24*60),  /*初次执行时间-设置为当前时间的1分钟后 输入null则不设置初次执行时间*/  
        INTERVAL => 'TRUNC(SYSDATE + 1)+(7*60+55)/(24*60)' /*每天早上7点55执行*/
      );  
  commit;
end;

创建以后可以通过执行下面的语句查询当前数据库的job(第一列为job_id)

SELECT * FROM dba_jobs

创建job的语句的参数就这些

比较谜团的就是INTERVAL部分,以下是从网上各个地方看到的感觉会常用的内容,使用的话直接替换或者加加改改就行

每秒:sysdate + 1/(24*60*60)
每30秒:sysdate + 30/(24*60*60)
每分钟:sysdate + 1/(24*60)
每两分钟:sysdate + 2/(24*60)
每五分钟:sysdate + 5/(24*60)
每小时:sysdate + 1/24
每两小时:sysdate + 2/24
每天:sysdate + 1 
每两天:sysdate + 2
每周:sysdate + 7
每天午夜12点:trunc(sysdate + 1)
每天早上8点30分:trunc(sysdate + 1) + (8 * 60 + 30)/(24 * 60)
每星期二中午12点:next_day(trunc(sysdate), '星期二') + 12/24
每周六和周日早上6点10分:trunc(least(next_day(sysdate, '星期六'), next_day(sysdate, '星期日'))) + (6 * 60 + 10) / (24 * 60)
每个月第一天的午夜12点:trunc(last_day(sysdate)) + 1
每季度的第一天凌晨0点执行:trunc(add_months(sysdate,3),'q')
每个季度最后一天的晚上11点:trunc(add_months(sysdate + 2/24,3),'q') - 1/24
每年7月1日和1月1日凌晨1点:add_months(trunc(sysdate,'yyyy'),6) + 1/24
每年1月1日凌晨1点执行:add_months(trunc(sysdate,'yyyy'),12) + 1/24

手动执行job

 begin
   DBMS_JOB.RUN(job_id); /*job的id*/
 end;

删除job

begin
  dbms_job.remove(241);  /*参数是job的id*/
  commit;
end;

修改执行时间

begin
  dbms_job.interval(job,interval);  /*job的ID,interval: 下一次任务的时间表达式*/
  commit;
end;

修改下次执行时间

begin
   dbms_job.next_date(job,next_date); /*job的ID,nex_date:下一次执行的时间表达式*/
   commit;
end;

修改执行任务

begin
    dbms_job.what('newProcedures();'); /*要更改的新操作名称,函数或者包名*/
  commit;
end;

查询job执行日志

select * from dba_scheduler_job_run_details where job_name = 'DBMS_JOB$_109'--DBMS_JOB$_109是拼接的,109为jobid
order by log_date desc;

以上

posted @ 2022-11-23 16:33  DbWong_0918  阅读(4280)  评论(0编辑  收藏  举报