~~~~(>_<)~~~~ 我们做了一个宾馆项目其中有一个要求是:
创建一个存储过程,当快要到客人预订的预抵时间时(默认提前两个小时),
将房间状态设为预留,可以提醒接待人员与客人联系确认是否入住。
该存储过程的调用应该是每隔一段时间就调用一次,你会想到什么?
有定时器吗?????????
——有!
创建一个存储过程,当快要到客人预订的预抵时间时(默认提前两个小时),
将房间状态设为预留,可以提醒接待人员与客人联系确认是否入住。
该存储过程的调用应该是每隔一段时间就调用一次,你会想到什么?
有定时器吗?????????
——有!
01 | create or replace procedure hotel_setpred |
02 | AS |
03 |
04 | t number := 2; --默认为提前2个小时 |
05 | r_roomid number; |
06 | begin |
07 | select r.roomid into r_roomid from hotel_t_Room r,hotel_t_Predestine p |
08 | where (p.arrivetime-sysdate)/24 <= t and r.roomid=p.roomid; |
09 | if sql%rowcount != 0 then |
10 | update hotel_t_Room set state=2 where roomid = r_roomid; |
11 | if sql%rowcount != 0 then |
12 | commit ; |
13 | end if; |
14 | end if; |
15 | exception |
16 | when no_data_found then |
17 | dbms_output.put_line( '失败!' ); |
18 | when others then |
19 | rollback ; |
20 | dbms_output.put_line( '读去失败!原因是:' ||sqlerrm); |
21 | end hotel_setpred; |
22 |
23 | --Oracle定时器 |
24 | declare |
25 | jobno number; |
26 | begin 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 | --删除一个定时器 |
38 | exec dbms_job.remove(84); |
39 | --停止一个定时器 |
40 | exec dbms_job.broken(84,sys.diutil.int_to_bool(1)); |
41 | --改变一个定时器的执行频率城每隔一小时执行一次 |
42 | exec dbms_job.interval(84, 'sysdate+5/1440' ); |
43 |
44 | --查看调度任务 |
45 | select * from user_jobs; |
46 | --查看正在执行的调度任务 |
47 | select * from dbms_jobs; |
48 | --查看执行完的调度任务 |
49 | select * from dba_jobs; |