oracle 您所在的位置:网站首页 如何查看oracle存储过程 oracle

oracle

2023-10-20 17:30| 来源: 网络整理| 查看: 265

平时工作多数业务的数据,需要有时间截点截止当天24点,定时执行计划还是用的比较多的。终于有时间手动整理总结一些内容了。 首先用一个完整的例子来实现定时执行存储过程。  任务目标:每小时向test表中插入一条数据  实现方案:      1.通过 oracle 中 dbms_job 完成存储过程的定时调用      2.在存储过程中完成相应的逻辑操作  实现步骤:    1.创建一个测试表  create table test(dTime date);       2.创建一个存储过程   

create or replace procedure p_test as  begin  insert into test values(sysdate);  commit; end; 

  3.创建执行计划:每小时运行一次存储过程 

参数说明:  declare jobno number; begin DBMS_JOB.SUBMIT (jobno => --代表的是号码,第几个定时任务 what => 'your_procedure;', --调用的存储过程名称 next_date => sysdate, --下次执行的时间(第一次执行的时间) interval => 'sysdate+1+5/(24)');--这个是间隔时间 commit; Declare    i Integer;  Begin     dbms_job.submit(i,'p_test;',Sysdate,'sysdate+1/24');  end;    --查看任务队列情况  select job as jobno,next_date,next_sec,failures,broken from user_jobs where what='your_procedure' ; broken:Y:没启动 N:启动

  4.运行执行计划 

Declare    jobno Integer;  Begin  dbms_job.run(jobno); -- 运行制定的执行计划  end; 

  5.停止执行计划 

Declare    jobno Integer;  Begin    dbms_job.broken(jobno,True);   -- 停止计划,不再继续执行    dbms_job.broken(jobno,True,Sysdate+(2/24/60));   -- 停止计划,并在两分钟后继续执行  end; 

  6.删除执行计划 

Declare    jobno Integer;  Begin    dbms_job.remove(jobno);  end; 

  7.修改执行计划的间隔时间

Declare    jobno Integer;  Begin    dbms_job.interval(jobno, 'sysdate+1/(24*60)');   -- 修改为:每分钟执行一次  end; 

8.修改要执行的操作:

Declare    jobno Integer;  Begin    dbms_job.what(jobno, what);    --指定任务号以及存储过程 end; 

  9.修改下次执行时间:  

declare begin dbms_job.next_date(jobno, next_date);  --指定任务号的时间 end;

10.时间

sysdate+1              表示每天执行一次 sysdate+1/24           表示每小时执行一次 sysdate+1/(24*60)      表示每分钟执行一次 sysdate+1/(24*60*60)   表示每秒执行一次  Sysdate+5 加5天,  Sysdate+5/24  加5小时,  Sysdate+5/24/60  加5分钟,  Sysdate+5/24/60/60 加5秒

 

.INTERVAL参数常用值示例

每天午夜12点            ''TRUNC(SYSDATE + 1)''     

每天早上8点30分         ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''     

每星期二中午12点         ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''     

每个月第一天的午夜12点    ''TRUNC(LAST_DAY(SYSDATE ) + 1)''     

每个季度最后一天的晚上11点 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''     

每星期六和日早上6点10分    ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''    

每3秒钟执行一次             'sysdate+3/(24*60*60)'   

每2分钟执行一次           'sysdate+2/(24*60)'   

每分钟执行  

Interval => TRUNC(sysdate,'mi') + 1/ (24*60) --每分钟执行  

interval => 'sysdate+1/(24*60)'  --每分钟执行  

interval => 'sysdate+1'    --每天  

interval => 'sysdate+1/24'   --每小时  

interval => 'sysdate+2/24*60' --每2分钟  

interval => 'sysdate+30/24*60*60'  --每30秒  

2:每天定时执行  

Interval => TRUNC(sysdate+1)  --每天凌晨0点执行  

Interval => TRUNC(sysdate+1)+1/24  --每天凌晨1点执行  

Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60)  --每天早上8点30分执行  

3:每周定时执行  

Interval => TRUNC(next_day(sysdate,'星期一'))+1/24  --每周一凌晨1点执行  

Interval => TRUNC(next_day(sysdate,1))+2/24  --每周一凌晨2点执行  

4:每月定时执行  

Interval =>TTRUNC(LAST_DAY(SYSDATE)+1)  --每月1日凌晨0点执行  

Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24  --每月1日凌晨1点执行  

5:每季度定时执行  

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q')  --每季度的第一天凌晨0点执行  

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24  --每季度的第一天凌晨1点执行  

Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24  --每季度的最后一天的晚上11点执行 

 6:每半年定时执行  

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24  --每年7月1日和1月1日凌晨1点  

7:每年定时执行  

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24  --每年1月1日凌晨1点执行 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有