实习过程中写了一些关于定时执行存储过程的JOB和对JOB的一些操作(启动、重启),现在记录下来方便自己以后的学习和为别人提供一些参考,写得不太好,希望大家提供点意见。
业务逻辑是这样的:在一个包中(DPK_HQ_POS_MOVE)写了三个存储过程,其中的一个存储过程(RunPosMove(null,null,null))用于调用一系列的函数,另外一个(Del_PosData(15))是用于清除临时表中某个固定时间之后的数据,最后一个(Del_PosDataLog(60))用于清除日志中某个固定时间之后的数据。每个存储过程用一个job来定时执行。
现在要求在一个包中写一些存储过程,其中的一个存储过程(JobStart)用于检测没有启动的job,并将其启动。一个存储过程(ReStart)用于当job挂掉后,用于重启job。再写一个存储过程(RunJobRelation)来调用这两个存储过程,而这个存储过程是定时执行的,因此该存储过程对应一个job,写在一个存储过程(monitor_job_proc)中。
具体实现代码如下:
create or replace package body dpk_hq_job_manage is
procedure RunJobRelation is
begin
JobStart;
restart;
end RunJobRelation;
procedure JobStart is
job_num number;
n_job number;
flag number;
begin
select count(*) into job_num from user_jobs where what in('DPK_HQ_POS_MOVE.RunPosMove(null,null,null);',
'DPK_HQ_POS_MOVE.Del_PosData(15);',
'DPK_HQ_POS_MOVE.Del_PosDataLog(60);');