Oracle定时任务调用存储过程

--删除core,cmnet,sp,miq,4张表一周之前的数据
create or replace procedure del_alarm_others_cancel_info AS

begin
 delete m_core_cancel where (sysdate-7) > ttime;
 delete m_cmnet_cancel where (sysdate-7) > ttime;
 delete m_sp_cancel where (sysdate-7) > ttime;
 delete m_miq_cancel where (sysdate-7) > ttime;
 
 delete m_core where state_type = 3 and (sysdate-7) > ttime;
 delete m_cmnet where state_type = 3 and (sysdate-7) > ttime;
 delete m_sp where state_type = 3 and (sysdate-7) > ttime;
 delete m_miq where state_type = 3 and (sysdate-7) > ttime;
 
 commit;
end del_alarm_others_cancel_info;


--删除cell表一周之前的数据
create or replace procedure del_alarm_cell_cancel_info AS
begin
 delete m_cell_cancel where (sysdate-7) > ttime;
 delete m_cell where state_type = 3 and (sysdate-7) > ttime;
 commit;
end del_alarm_cell_cancel_info;



--Oracle定时器
declare
  job_cell number;
  job_others number;
begin
  dbms_job.submit(job_others, --定时器ID,系统会自动获得
                  'del_alarm_others_cancel_info;', -- 执行的过程名
                  sysdate, --定时器开始的时间
                  'sysdate+10/1440' --设置定时器执行频率,每隔10分钟执行一次
                  );
   
  dbms_job.submit(job_cell, --定时器ID,系统会自动获得
                  'del_alarm_cell_cancel_info;', -- 执行的过程名
                  sysdate+(3/24/60), --定时器开始的时间,延迟3分钟执行
                  'sysdate+10/1440' --设置定时器执行频率,每隔10分钟执行一次
                  );
   commit;
end;

-- 启动定时器
begin dbms_job.run(29); end;
/
begin dbms_job.run(30); end;

--停止定时器
begin dbms_job.broken(29,sys.diutil.int_to_bool(1)); end;
/
begin dbms_job.broken(30,sys.diutil.int_to_bool(1)); end;



--说明:
--1、查job进程:
show parameter job_queue_process;
select * from v$parameter t where t.name like 'job%';
--2、修改job进程:
ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 5;


---------------------------------------

--查看调度任务
select *from user_jobs;
--查看正在执行的调度任务
select *from dba_jobs_running;
--查看执行完的调度任务
select *from dba_jobs;



定时器的参数说明:
myjob参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作;
what参数是将被执行的PL/SQL代码块,这里指的是一个存储过程,注意名字后面的分号;
next_date参数指识何时将运行这个工作。写Job的时候可以不指定该值;
interval参数何时这个工作将被重执行。
关于interval的设置,参考以下几个例子:
1、 每分钟执行
Interval => TRUNC(sysdate,’mi’) + 1 / (24*60)
2、 每天定时执行
例如:每天的凌晨2点执行
Interval => TRUNC(sysdate) + 1 +2 / (24)
3、 每周定时执行
例如:每周一凌晨2点执行
Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天
4、 每月定时执行
例如:每月1日凌晨2点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24
5、 每季度定时执行
例如每季度的第一天凌晨2点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24
6、 每半年定时执行
例如:每年7月1日和1月1日凌晨2点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24
7、 每年定时执行
例如:每年1月1日凌晨2点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24


引用:http://blog.csdn.net/kpchen_0508/article/details/49154317


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间辜负了谁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值