存储过程及定时执行dbms_job

本文介绍如何通过编写存储过程实现数据库定时操作,具体展示了如何根据系统配置检查并处理消息超时未读的情况,利用DBMS_JOB创建10分钟定时执行的实例。

有时候我们需要通过数据库定时执行一些操作,此时需要用到存储过程及定时执行;

这里我们去练习一个小的demo:首先我们写一个存储过程

------添加时间参数   小于零不处理  单位小时
insert into sys_config (bh,ms,nr,xtbz,id)values('XXSXSJ','消息失效时间长度','120','XGXT','4028bd8879172eee01791782ddce000b');

commit;
-----存储方法
create or replace procedure proc_xxtx as
  yfsc number;
  szsc number;
  v_count number;
begin
   --获取配置的消息提醒时长
   select nr into szsc from SYS_CONFIG t WHERE t.bh='XXSXSJ';
   if(szsc <=0) then 
   --不做处理
  select 1 into v_count from dual; 
   else
    
   for i in (
    select r.mr_id  ,t.mt_createtime    from MSG_RECEIVER r   left join 
       msg_text t on t.mt_id=r.mr_mtid 
      where ( t.mt_type='1' OR T.MT_TYPE='2' )and  r.mr_read='0'
    order by t.mt_createtime desc
    ) loop
   
   --以小时为单位进行比较
     select ( sysdate-  g.mt_createtime)*24 into yfsc  from (
     select r.mr_id,t.mt_createtime 
     from MSG_RECEIVER r
     left join msg_text t on t.mt_id=r.mr_mtid 
     where ( t.mt_type='1' OR T.MT_TYPE='2' )and  r.mr_read='0'
     order by t.mt_createtime desc) g  where g.mr_id=i.mr_id ;
     if (yfsc>szsc) then
        --修改超时未读的消息
       update  MSG_RECEIVER a set a.mr_read ='1' where a.mr_id=i.mr_id;
     end if; 
     commit;
   end loop;
  end if;
end;

首先我们先insert一个系统的参数设置;

然后我们再根据这个参数设置去根据查询的数据进行数据库的操作;

我们将一些表记录中的一些超时的数据根据设置的参数进行比较,根据比较的结果进行数据状态的修改;

然后我们不能每次都要手动执行存储过程;此时需要我们设置定时执行的dbms_job 进行定时操作;

使用语句如下

------定时器10分钟依次


declare 
proc_xxtx number; 
begin
sys.dbms_job.submit(proc_xxtx,'proc_xxtx;',sysdate,'sysdate+10/1440');
end;

这样,我们的定时器就已经创建好了;效果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值