spring定时器 定时操作同一数据库数据

来源:互联网 发布:张无忌 知乎 编辑:程序博客网 时间:2024/06/05 03:27
~~~~(>_<)~~~~ 我们做了一个宾馆项目其中有一个要求是:
创建一个存储过程,当快要到客人预订的预抵时间时(默认提前两个小时),
将房间状态设为预留,可以提醒接待人员与客人联系确认是否入住。
该存储过程的调用应该是每隔一段时间就调用一次,你会想到什么?


有定时器吗?????????
——有!
01create orreplace procedure hotel_setpred
02AS
03 
04t number := 2; --默认为提前2个小时
05r_roomid number;
06begin
07  selectr.roomid into r_roomid  from hotel_t_Room r,hotel_t_Predestine p
08        where  (p.arrivetime-sysdate)/24 <= tand r.roomid=p.roomid;
09  if sql%rowcount != 0then
10     updatehotel_t_Room set state=2 where roomid = r_roomid;
11     if sql%rowcount != 0then
12       commit;
13       endif;
14  endif;
15exception
16      whenno_data_found then
17        dbms_output.put_line('失败!');  
18      whenothers then
19        rollback;
20        dbms_output.put_line('读去失败!原因是:'||sqlerrm);
21end hotel_setpred;
22 
23--Oracle定时器
24declare
25jobno number;
26begin dbms_job.submit(
27  jobno,  --定时器ID,系统会自动获得
28  'hotel_setpred;',-- 执行的过程名
29  sysdate, --定时器开始的时间
30  'sysdate+5/1440'--设置定时器执行频率,这样是每个5分钟执行一次
31  );
32   
33  commit;
34  end;
35 interval=>trunc(sysdate,'mi')+5/(24*60);
36 dbms_job.run(84);
37--删除一个定时器
38exec dbms_job.remove(84);
39--停止一个定时器
40exec dbms_job.broken(84,sys.diutil.int_to_bool(1));
41--改变一个定时器的执行频率城每隔一小时执行一次
42exec dbms_job.interval(84,'sysdate+5/1440');
43 
44--查看调度任务
45select *fromuser_jobs;
46--查看正在执行的调度任务
47select *fromdbms_jobs;
48--查看执行完的调度任务
49select *fromdba_jobs;
0 0
原创粉丝点击