怎么让一个JOB每天执行俩次?
如每天中午12:00,下午5:30执行
我的回答:
方法1:
job每半小时执行一次调用外层procedure, 由外层procedure判断时间决定是否执行原来的procedure.<<>
begin
dbms_job.submit(job => :job,
what => 'pshell;',
next_date => sysdate,
interval => 'sysdate+30/60/24';
commit;
end;
create procedure pshell as
begin
if to_char(sysdate, 'hh24:mi") > '12:00' and to_char(sysdate, 'hh24:mi") < '12:30' then
p;
end if;
if to_char(sysdate, 'hh24:mi") > '17:30' and to_char(sysdate, 'hh24:mi") < '18:00' then
p;
end if;
end;
方法2:
用复杂的表达式来实现, 比如给job指定interval:
dbms_job.submit(job => :job,
what => 'p;',
next_date => sysdate,
interval => 'decode(sign(sysdate-trunc(sysdate,''DD'')-12/24),-1,trunc(sysdate,''DD'')+12/24,decode(sign(sysdate-trunc(sysdate,''DD'')-17/24),-1,trunc(sysdate,''DD'')+17.5/24,trunc(sysdate,''DD'')+1+12/24))');
commit;
end;
/
另外,interval参数的最大长度似乎只有200个字符(?), 如果再复杂一点,恐怕就没办法用这种办法来实现。
方法1看似复杂, 但提供了极大的灵活性。推荐使用方法1。
Technorati Tags: oracle, itpub, job来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/32/viewspace-184276/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/32/viewspace-184276/