oldwain随便写 http://oldwain.itpub.net/
<a href="http://oldwain.itpub.net">oldwain随便写</a>
itpub论坛回复:让一个JOB每天执行俩次
上一篇 /
下一篇 2006-04-08 00:00:00
/ 个人分类:Oracle
问题: 来源(winrar )
怎么让一个JOB每天执行俩次?
zc3C;\2I.S;hL7Y0如每天中午12:00,下午5:30执行
我的回答:
ITPUB个人空间,Gf H}c$?B;e4wR方法1:
job每半小时执行一次调用外层procedure, 由外层procedure判断时间决定是否执行原来的procedure.
<<>
beginITPUB个人空间y
^;r3Q@3O s W
dbms_job.submit(job => :job,ITPUB个人空间rNf X-S
c
what => 'pshell;',ITPUB个人空间mGWH KT2m!}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*?J0xF
/
这样看上去是简便了, 可是太晦涩, 不容易维护。
另外,interval参数的最大长度似乎只有200个字符(?), 如果再复杂一点,恐怕就没办法用这种办法来实现。
方法1看似复杂, 但提供了极大的灵活性。推荐使用方法1。
Technorati Tags: oracle, itpub, job
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: