N个时间区段存储在一张表中,包括了开始时间和结束时间.还有是属于第几条数据
Job---1:此Job执行存储过程Proc1,会根据当前时间是不是在要执行的时间区段内去
启动运行Job2或是停止Job2
Job---2:此Job会启动必须在N个时间区段内要执行的存储过程Proc2如果增加删除修改时间区段数据,就执行一下Proc1Proc1的内容:
/**
* 监控当前是不是在时间区段内
*
* 如果在所有时间区段之前(-1),设置JOB2的Next_Date为第一数据的开始时间, Broken为False
* 如果在某区段间但暂停执行存储过程(0),设置JOB2的Broken为True
* 如果在某区段间,设置JOB2的Broken为False
* 如果在二个时间区段之间(-2),设置JOB2的Next_Date为下一条数据的开始时间, Broken为False
* 如果在所有时间区段之后(-3),设置JOB2的Broken为True
* 如果没有时间区段数据(-4),设置JOB2的Broken为True
*
*/
PROCEDURE Proc1 is
vParams TYPEPARAMS;
vRoundNO Integer;
begin
--取时间区段参数
vParams := TYPEPARAMS();
vParams.getParams();
vRoundNO := vParams.checkIsPeriod();
if (vRoundNO = -4) then
dbms_job.broken(1,true);
dbms_job.broken(2,true);
elsif (vRoundNO = -3) then
dbms_job.broken(1,true);
dbms_job.broken(2,true);
elsif (vRoundNO = -2) then
dbms_job.broken(1,False);
dbms_job.Next_Date(2,vParams.timeList(vRoundNO).getBegTime());
dbms_job.Broken(2,False);
elsif (vRoundNO = -1) then
dbms_job.Next_Date(1,vParams.timeList(1).getBegTime());
dbms_job.broken(1,False);
dbms_job.Next_Date(2,vParams.timeList(1).getBegTime());
dbms_job.Broken(2,False);
elsif (vRoundNO = 0) then
dbms_job.Next_Date(1,sysdate);
dbms_job.Broken(1,False);
dbms_job.Broken(2,True);
elsif (vRoundNO > 0) then
dbms_job.Next_Date(1,sysdate);
dbms_job.Broken(1,False);
dbms_job.Next_Date(2,sysdate);
dbms_job.Broken(2,False);
end if;
end Proc1;
就是看起来有点儿复杂