zoukankan      html  css  js  c++  java
  • oracle定时执行存储过程

          一直用 sql server  建作业什么得定时执行还是很ok得  碰到oracle就懵l   真实为难我胖虎了  

    create or replace procedure MH_POLICEMAN_GPS_INFO_PROC 
    as 
    begin       
    
    insert into  MH_XH_HQ_POLICEMAN_INFO_TEP SELECT DISTINCT STANDARD_CODE, ORG,NAME,IDCARD,POLICENUMBER,POSITION,MOBILE,LAT,LNG, DT from
    (
    SELECT  A.*,B.LAT,B.LNG,B.DT,B.GPSID FROM
    (
    SELECT * FROM MH_XH_HQ_POLICEMAN_INFO
    )A
    LEFT JOIN
    (
    
    SELECT * FROM MH_POLICEMAN_GPS_INFO WHERE (GPSIDCARD,GPSTIME) IN(
    SELECT GPSIDCARD,MAX(GPSTIME) FROM MH_POLICEMAN_GPS_INFO GROUP BY GPSIDCARD) AND DT=to_char(sysdate,'yyyymmdd')) B
    ON A.IDCARD=B.GPSIDCARD WHERE DT is not NULL) ;
    commit;
    end MH_POLICEMAN_GPS_INFO_PROC; 
    
    
    创建存储过程就不说了  注意加;就好  自己吃了好几次亏  痛得教训

    接下来就是建立定时器了

    declare   job111 NUMBER;
    begin
    dbms_job.submit(job=>job111,what=>'MH_POLICEMAN_GPS_INFO_PROC;',next_date=>to_date('20191120 21:30:00','yyyyMMdd hh24:mi:ss'),interval=>'sysdate+1+30/(24*60)',no_parse=>false);
    end;
    
    说明一下  job11这个可随便定义
    dbms_job.submit(
    job => :job, //以JOB的方式进行提交
    what => '存储过程名称', //job调用的存储过程,建job的目的是要调用存储过程
    next_date => sysdate, // 设置的时间是由系统自动生成,可以根据自己的需要设置该时间
    interval => 'sysdate+1'); // 多长时间调用一次,时间间隔是一天,根据需要可以自己设置

    一切准备就绪  开始启动定时器

    BEGIN
      DBMS_JOB.RUN(23);
      commit;
    END;
    
    23 就是定时器得索引  可根据下面方式查出
    select * from user_jobs;——查看调度任务
    
    select * from dba_jobs_running;——查看正在执行的调度任务
    
    select * from dba_jobs;——查看执行完的调度任务

    关于 interval 的一些设置技巧

    关于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:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)。

    定时器得多种操作

    1.设置定时器开关

    dbms_job.broken(jobid,off);
    jobid:user_jobs表中的jobid(主键),数字格式
    off:定时任务开关,true or false,true关闭,false开启

    2.运行定时器

    dbms_job.run(23);

    jobid:user_jobs表中的jobid(主键),数字格式

    3.删除定时器

    dbms_job.remove(jobid);

    jobid:user_jobs表中的jobid(主键),数字格式

    4.修改定时器

    dbms_job.change(jobid,what,next_date,interval);

    jobid:user_jobs表中的jobid(主键),数字格式

    what:要执行的存储过程,不用写begin end 但在结尾要加分号

    next_date:下一次执行的时间,这个参数是时间格式的,而不是字符串

    interval:执行频率,也就是计算下一次执行时间的公式,是字符串格式的

    范例:

  • 相关阅读:
    原型设计
    简单APP——ToDoList的二次开发(日期规范化+构建搜索栏)
    Java基本语言篇
    C++中各种常用转换汇总学习
    语言篇swift
    洛谷P2384 最短路,积化加
    洛谷P4568 分层图最短路
    【洛谷P1962】矩阵快速幂求Fibonacii数列
    vue-cli教程
    单页应用原理
  • 原文地址:https://www.cnblogs.com/manwwx129/p/11910196.html
Copyright © 2011-2022 走看看