oldwain随便写 http://oldwain.itpub.net/ <a href="http://oldwain.itpub.net">oldwain随便写</a>

itpub论坛回复:让一个JOB每天执行俩次

上一篇 / 下一篇  2006-04-08 00:00:00 / 个人分类:Oracle

问题: 来源(winrar )

怎么让一个JOB每天执行俩次?
z c3C;\2I.S;hL7Y0如每天中午12:00,下午5:30执行

我的回答:

ITPUB个人空间,Gf H }c$?B;e4wR

方法1:

job每半小时执行一次调用外层procedure, 由外层procedure判断时间决定是否执行原来的procedure.

<<>

beginITPUB个人空间y ^;r3Q@3O sW
dbms_job.submit(job => :job,ITPUB个人空间rNfX-S c
what => 'pshell;',ITPUB个人空间mGWHKT2m!}L,}
next_date => sysdate,
/uxe;t-W:k+m-Idj)^0interval => 'sysdate+30/60/24';
\8M"Z6ezl9| o0commit;
,R!f)DG ?$a-nm1b0end;

create procedure pshell as
QE-V/_K{]+R0beginITPUB个人空间],x'H`9M6g&K\(i
if to_char(sysdate, 'hh24:mi") > '12:00' and to_char(sysdate, 'hh24:mi") < '12:30' thenITPUB个人空间 C1WF_$of7U/Y)G
p;ITPUB个人空间6ii"x8R9B7j
end if;
gy+y.O8t'_tp0if to_char(sysdate, 'hh24:mi") > '17:30' and to_char(sysdate, 'hh24:mi") < '18:00' thenITPUB个人空间@|t;v%vS@+B \C2N
p;
N)u:A Om4I-q0end if;ITPUB个人空间v%TP)S!S)`:O8[,W
end;

方法2:

用复杂的表达式来实现, 比如给job指定interval:

beginITPUB个人空间UnI/o e(pr"E ?
dbms_job.submit(job => :job,ITPUB个人空间s3c Tn#EKw!H
what => 'p;',
kG"?aK3f0next_date => sysdate,
k.`%`(IC&Z5]F0interval => '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))');ITPUB个人空间h(CEVtm"t,k(F1P/n$}
commit;ITPUB个人空间'z @M J,u
end;ITPUB个人空间:xw'W*?J0x F
/
这样看上去是简便了, 可是太晦涩, 不容易维护。

另外,interval参数的最大长度似乎只有200个字符(?), 如果再复杂一点,恐怕就没办法用这种办法来实现。

方法1看似复杂, 但提供了极大的灵活性。推荐使用方法1。

Technorati Tags: , ,


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-23  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 2741
  • 日志数: 1042
  • 建立时间: 2007-11-28
  • 更新时间: 2008-02-22

RSS订阅

Open Toolbar