• PLSQL定时任务创建 Oracle数据库dbms_job


    1. 创建一个job
    • job创建
    begin
      sys.dbms_job.submit(job => 1,        --代表的是号码,第几个定时任务
                          what => 'sys_mailing_list_job;',  --这个是调用的你想使用的存储过程切记要打;不然会报错
                          next_date => to_date('20-08-2018 14:05:00', 'dd-mm-yyyy hh24:mi:ss'),      --这个是下次调用的时间 
                          interval => 'trunc(sysdate,''hh'')+(60+5)/(24*60)');
      commit;    --这个是间隔时间 。我这个代表的是每个小时的过5 比如 1:05,2:05,3:05...24小时的
    end;
     
    • 删除job: dbms_job.remove(jobno); – jobno就是你得任务号
    • 修改要执行的操作: job:dbms_job.what(jobno, what); --指定任务号以及存储过程
    • 修改下次执行时间:dbms_job.next_date(jobno, next_date); --指定任务号的时间
    • 修改间隔时间:dbms_job.interval(jobno, interval); --指定任务号的间隔时间
    • 启动job: dbms_job.run(jobno); --指定任务号启动
    • 停止job: dbms.broken(jobno, broken, nextdate); –broken为boolean值 N代表启动,Y代表没启动(STOP)
    1. 创建一个dbms_job
    • 新建一个表
    create or replace table testTable(
        id  number(32);
        name   varchar2(10);
    );
    • 新建一个存储过程
    create or replace procedure testTable_PRO is
     begin
           insert into testTable
           values{
              id = 111,  
              name ='测试'  
            } 
     end;
    • 开始创建dbms_job
      1、
      在这里插入图片描述
      2、
      (1)what的值是存储过程的名字
      (2)间隔的值是间隔的时间(也就是多久执行一次)
      (3)作业的值自动生成
      (4)下一个日期会自动生成也可以手动填写
      what的值就是存储过程的名字
      3、关于job运行的时间
    关于job运行时间
    关于job运行时间
    
    1:每分钟执行
    
    Interval => TRUNC(sysdate,'mi') + 1/(24*60)
    
    2:每天定时执行
    
    例如:每天的凌晨1点执行
    
    Interval => TRUNC(sysdate) + 1 +1/(24)
    
    3:每周定时执行
    
    例如:每周一凌晨1点执行
    
    Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
    
    4:每月定时执行
    
    例如:每月1日凌晨1点执行
    
    Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
    
    5:每季度定时执行
    
    例如每季度的第一天凌晨1点执行
    
    Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
    
    6:每半年定时执行
    
    例如:每年7月1日和1月1日凌晨1点
    
    Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
    
    7:每年定时执行
    
    例如:每年1月1日凌晨1点执行
    
    Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'), 12)+1/24
    
    job的运行频率设置
    
    1.每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*60
    
    2.Toad中提供的:
    
    每天:trunc(sysdate+1) 
    
    每周:trunc(sysdate+7) 
    
    每月:trunc(sysdate+30) 
    
    每个星期日:next_day(trunc(sysdate),'星期日') 
    
    每天6点:trunc(sysdate+1)+6/24 
    
    半个小时:sysdate+30/(24*60) 
    
    3.每个小时的第15分钟运行,比如:8:159:1510:15…:trunc(sysdate,'hh')+(60+15)/(24*60) 。
     

    4、怎么查看job

    SELECT * FROM dba_jobs;
     

    在这里插入图片描述
    (1)job是生成的作业号
    (2)last_date是最后一次的执行时间
    (3)next_date是下一次的执行时间
    (4)broken为N代表这个job正在运行
    (5)interval是你写的间隔执行时间

    5、停止和启动一个JOB

    • 启动job: dbms_job.run(jobno); --指定任何号启动
    • 停止job: dbms.broken(jobno, broken, nextdate); –broken为boolean【true,false】值
    --调用broken存储的过程 将broken设置为true就停止了一个启动的job
    begin
     dbms_job.broken(1, true, sysdate);
     commit;
    end;
     
    --调用dbms_job.run();启动Job
    begin
     dbms_job.run(1);
     commit;
    end;

    ————————————————
    原文链接:https://blog.csdn.net/qq_40709468/article/details/81876828

  • 相关阅读:
    【算法学习笔记】76.DFS 回溯检测 SJTU OJ 1229 mine
    【算法学习笔记】75. 动态规划 棋盘型 期望计算 1390 畅畅的牙签盒(改)
    【算法学习笔记】74. 枚举 状态压缩 填充方案 SJTU OJ 1391 畅畅的牙签袋(改)
    【算法学习笔记】73.数学规律题 SJTU OJ 1058 小M的机器人
    【算法学习笔记】72.LCS 最大公公子序列 动态规划 SJTU OJ 1065 小M的生物实验1
    【算法学习笔记】71.动态规划 双重条件 SJTU OJ 1124 我把助教团的平均智商拉低了
    【算法学习笔记】70.回文序列 动态规划 SJTU OJ 1066 小M家的牛们
    【算法学习笔记】69. 枚举法 字典序处理 SJTU OJ 1047 The Clocks
    【算法学习笔记】68.枚举 SJTU OJ 1272 写数游戏
    【算法学习笔记】67.状态压缩 DP SJTU OJ 1383 畅畅的牙签袋
  • 原文地址:https://www.cnblogs.com/yueyongsheng/p/16143065.html
Copyright © 2020-2023  润新知