有时候我们需要通过数据库定时执行一些操作,此时需要用到存储过程及定时执行;
这里我们去练习一个小的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;
这样,我们的定时器就已经创建好了;效果如下

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

被折叠的 条评论
为什么被折叠?



