每月最后一天凌晨两点执行一次定时器怎么写

解决方案 »

  1.   

    job定时每日凌晨两点执行
    其中加个判断,是否为月末,月末则调用过程
    看看可行否,
    declare 
    job1 number;
    begin
      dbms_job.submit(job1,
      'begin 
       if to_char(sysdate,''dd'')=to_char(last_day(sysdate),''dd'')   --判断月末
       then 
       PLCH_PRO;
       end if;
       end ;',
       sysdate,
       'trunc(sysdate)+1+2/24');   --2点
    end;
      

  2.   

    谢谢,不过你写的判断月末只要到月末那一刻(0点)就会调存储过程,下面的 'trunc(sysdate)+1+2/24');   --2点,有点不理解
    declare   
      jobno number;   
    begin   
      dbms_job.submit(
        jobno,
        what =>  'NoParPro;',   --NoParPro为存储过程的名称    Interval => 'trunc(last_day(sysdate))'
         -- --每月最后一天零点执行一次'
      );   
      commit;   
    end; 
    我是这样写的,trunc(last_day(sysdate))'返回当前月的最后一天,求指点
      

  3.   

    'trunc(sysdate)+1+2/24');  就等于 Interval => 'trunc(sysdate)+1+2/24')''trunc(sysdate) 截取当天日期    +1 是下一天
    2/24   是一天24小时的第2个小时你这个我还没想到  
    trunc(last_day(sysdate))'  --这么写会报错啊~~
    你试试下面的
    declare   
      jobno number;   
    begin   
      dbms_job.submit(
        jobno,
        what =>  'NoParPro;',   --NoParPro为存储过程的名称    Interval => 'trunc(last_day(sysdate+1))+2/24'   --每次月底凌晨2点执行,下次时间为下月底凌晨2点
        
      );   
      commit;   
    end; 
      

  4.   

     add_months(trunc(sysdate, 'mm'), 1) - 1 + 2 / 24