• 怎样创建Oracle的dbms_jobs(数据库任务)


    一、业务需求

        在开发项目的过程中,我们需要对某个存储过程(或SQL语句)执行定时任务(比如指定每天的每个时间内执行),这时我们就需要使用到数据库任务(DBMS_JOBS)来实现。

    二、实现方法

    2.1、查询当前运行的数据库任务语句

    1. --查看当前用户下的数据库执行任务语句
    2. SELECT * FROM dba_jobs ;

    2.2、使用PL/SQL创建dbms_jobs

        选择DBMS_Jobs点击鼠标右键选则【新建】,在What值输入需执行的存储过程名称及其对应参数,在输入时间间隔,最后点击应用即可。

    2.3、通过SQL语句创建DBMS_Jobs

    1. --通过SQL创建DBMS_Jobs(模板)
    2. declare
    3. job number;
    4. BEGIN
    5. DBMS_JOB.SUBMIT(
    6. JOB => job, /*自动生成JOB_ID*/
    7. WHAT =>'storedProcedureName(Param);', /*需执行的存储过程名称或SQL语句*/
    8. NEXT_DATE => sysdate, /*初次执行时间(立即执行)*/
    9. INTERVAL => 'TRUNC(sysdate+1) + (8.5*60)/ (24 * 60)' /*执行间隔(每隔一天的早上8点半执行)*/
    10. );
    11. commit;
    12. end;
    13. --示例程序(每天早上8:30执行【TESTINUPTOUTPUT】存储过程且指定固定参数为1000)
    14. declare
    15. job number;
    16. begin
    17. sys.dbms_job.submit(
    18. job => job,
    19. what => 'declare inputInfo varchar2(50):=''1000'';
    20. begin
    21. TESTINUPTOUTPUT(inputInfo);
    22. end;',
    23. interval => 'TRUNC(sysdate+1) + (8.5*60)/ (24 * 60)');
    24. commit;
    25. end;

    2.4、运行DBMS_Jobs的SQL语句

    1. --运行DBMS_JOBS的SQL语句
    2. BEGIN
    3. dbms_job.run(任务编号);
    4. END;

    运行dbms_Job示例如下:

    2.5、 停止DBMS_Jobs的SQL语句

    1. --手动停止某个DBMS_Job
    2. /*
    3. 格式:dbms_job.broken(jobId,broken,next_date);
    4. jobId:定时任务的编号(DBMS_Job)
    5. broken:值为true时,表示禁用job;值为false时,表示启用job。
    6. next_date:(某一时刻停止),也可是sysdate(立刻停止)(默认值为sysdate)。
    7. */
    8. BEGIN
    9. dbms_job.broken (jobId, TRUE, next_date) ;
    10. COMMIT ;
    11. END ;

     运行停止DMBS_Job任务示例如下:

     2.6、修改定时任务(DBMS_Jobs)的SQL语句

    2.6.1、修改定时任务的执行间隔

    1. --修改定时任务的时间间隔
    2. /*
    3. jobId:任务的编号
    4. interval: 任务执行间隔的时间表达式
    5. */
    6. begin
    7. dbms_job.interval(jobId,interval);
    8. commit;
    9. end;

     运行示例如下:

    2.6.2、修改定时任务的下次执行时间

    1. --修改定时任务的下一次执行时间
    2. /*
    3. jobId:任务的编号
    4. next_date: 下一次任务执行的时间表达式
    5. */
    6. begin
    7. dbms_job.next_date(jobId,next_date);
    8. commit;
    9. end;

     运行示例:

    2.6.3、修改定时任务要执行的操作(或存储过程)

    1. --修改定时任务要执行的操作
    2. /*
    3. jobId:任务的编号
    4. newStoredProcedure: 修改为的新存储过程
    5. */
    6. begin
    7. dbms_job.what(jobId,'newProcedures;');
    8. commit;
    9. end;

     运行示例如下:

    2.7、删除定时任务的SQL语句

    1. --删除定时任务的SQL语句
    2. /*
    3. Jobid:表示需删除的任务编号
    4. */
    5. begin
    6. dbms_job.remove(Jobid);
    7. commit;
    8. end;

    运行示例如下: 

     三、定时任务的时间间隔说明

    定时任务的时间间隔说明
    序号说明时间间隔表达式
    1时间间隔为1分钟trunc(sysdate,'mi') + 1/ (24*60) 或 sysdate + 1 / (24 * 60) 
    2时间间隔为1小时 sysdate + 1/24 from 
    3时间间隔为每天凌晨1点 trunc(sysdate+ 1)  +1/ (24) 
    4时间间隔为每周一凌晨1点trunc(next_day(sysdate,'星期一'))+1/24 
     
    5时间间隔为每月1日凌晨1点trunc(LAST_DAY(SYSDATE))+1+1/24
    6时间间隔为每季度的第一天凌晨1点trunc(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
    7时间间隔为每半年定时执行【10月1日和1月1日凌晨1点】 ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
    8时间间隔为每年定时执行【每年1月1日凌晨1点】

    ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

  • 相关阅读:
    java计算机毕业设计教评系统源码+mysql数据库+系统+lw文档+部署
    如何保证消息的顺序性
    [每周一更]-(第64期):Dockerfile构造php定制化镜像
    【免费赠送源码】Springboot喵喵宠物医院管理系统ti5f6计算机毕业设计-课程设计-期末作业-毕设程序代做
    HBuilder X实现banner轮播图
    CAD进阶练习(四)
    excel打开只显示菜单栏内容却不显示改如何处理
    蓝桥杯打卡Day15天
    [LMKD] [Android] 进程OomAdj调整分析:OomAdj调整次数(2)
    【无标题】
  • 原文地址:https://blog.csdn.net/xiaochenXIHUA/article/details/126494319