某个时间段内间隔指定时间执行任务:如:每天9:00 到 17:30 每5分钟 执行 _ABC_ 的存储过程。oracle 10G 以上版本。真心求教,不胜感激!

解决方案 »

  1.   


    --试试,下面这个是执行上面所说功能的存储过程,调用即可
    Create Or Replace Procedure PROC_JOB_RAIN_JM  
    Is  
    li_jobno Number;  
    Begin  
    if to_char(sysdate,'hh24:mi:ss')>='09:00:00' and to_char(sysdate,'hh24:mi:ss')<='17:30:00' then
    DBMS_JOB.SUBMIT(li_jobno,'_ABC_;',
    SYSDATE,'TRUNC(SYSDATE + 5)');  
    end if;
    End; 
      

  2.   

    Create Or Replace Procedure PROC_JOB_RAIN_JM Is
      li_jobno binary_integer;--用于存放job的编号
    Begin
      select job
        into li_jobno
        from dba_jobs
       where what = 'PROC_JOB_RAIN_JM;_ABC_;';
       --如果时间大于17:30 则job在下一天的9点执行
      if to_char(sysdate, 'hh24:mi:ss') > '17:30:00' then
        DBMS_JOB.broken(li_jobno, false, trunc(SYSDATE + 1) + 9 / 24);
        --如果时间在9点之前则job在这天的9点执行
      elsif to_char(sysdate, 'hh24:mi:ss') < '09:00:00' then
        DBMS_JOB.broken(li_jobno, false, trunc(SYSDATE) + 9 / 24);
      end if;
      commit;
    End PROC_JOB_RAIN_JM;
    /
    variable job1 number;
    begin
    --每天晚上8点执行
    dbms_job.submit(job1,'PROC_JOB_RAIN_JM;_ABC_;',trunc(sysdate)+9/24,'sysdate+5/24/60');
      commit;
    end; 
    /