3

我正在尝试创建一个将在两天内运行一次的任务(删除一些缓存数据)。这将在Oracle 11g. 到目前为止,我想出了以下匿名块:

 begin 
 DBMS_SCHEDULER.CREATE_JOB (
     job_name             => 'clear_cache',
     job_type             => 'PLSQL_BLOCK',
     job_action           => 'begin delete from MY_CACHE;commit; end;',
     start_date           =>  to_date('19/09/2016','dd/mm/rrrr')+ 19/24,
     repeat_interval      => 'to_date(''19/09/2016'',''dd/mm/rrrr'')+ 2 + 19/24',
     enabled              => TRUE); 
  end;

但是,我不确定 repeat_interval 值..

假设我今天将运行这个块(15/09/2016),我想clear_cache 被执行:

19/09/2016 at 7 p.m 
21/09/2016 at 7 p.m.
23/09/2016 at 7 p.m. 
etc  

我知道如果我使用

 start_date           =>  sysdate,
 repeat_interval      => 'trunc(sysdate) + 7 + 7/24'

然后它将开始执行today,每天都会重复,但我想要的是从下周一开始并每隔7一天7 p.m.重复一次,我不知道如何实现......

所以,我想知道到底要放入什么repeat_interval...

谢谢。

4

1 回答 1

6

值得使用内置的日历语法,而不是尝试自己动手。通过声明您希望作业以 2 的间隔每天运行一次,它将每 2 天运行一次。

语法是FREQ=DAILY;INTERVAL=2,如果您将开始日期设置为晚上 7 点,那么它将在您当前时区的那个时间开始。

start_date参数是日期,因此您可以在此处使用实际日期或时间戳。

DBMS_SCHEDULER.CREATE_JOB (
     job_name             => 'clear_cache',
     job_type             => 'PLSQL_BLOCK',
     job_action           => 'begin delete from MY_CACHE; commit; end;',
     start_date           => timestamp '2016-09-19 19:00:00',
     repeat_interval      => 'FREQ=DAILY;INTERVAL=2',
     enabled              => TRUE); 
于 2016-09-15T12:17:25.660 回答