oldwain随便写
===========================================================
===========================================================

问题: 来源(winrar )

怎么让一个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:

begin
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: , ,

(需要引用, 请注明出处: http://oldwain.itpub.net)

oldwain 发表于:2006.04.08 23:33 ::分类: ( Oracle ) ::阅读:(2164次) :: 评论 (3) ::收藏此页到365Key
re: itpub论坛回复:让一个JOB每天执行俩次 [回复]

懒人方法:设置2个job,一个12点执行,一个5点半执行。

dbaoracle 评论于: 2006.04.09 13:33
re: dbaoracle [回复]

简单就是美。 你说的懒方法其实是最简便可靠的。

oldwain 评论于: 2006.04.09 15:37
re: itpub论坛回复:让一个JOB每天执行俩次 [回复]

呵呵 非常好的注意

leon 评论于: 2008.08.20 10:33

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


自我介绍
切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
赞助商
网站链接...
其它资源
我的网摘...