动态修改oracle job 让job在指定时间执行

本文介绍如何使用Oracle PL/SQL修改Job,让其在指定时间执行,包括参数设置、时间计算和Job属性修改等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态修改oracle job 让job在指定时间执行

PROCEDURE Wsp_Call_MillAcident (
                                   an_acidentId  IN VARCHAR2,--发生事故的ID值为字符串类型
                                        at_acidentime IN VARCHAR2,--发生事故的时间精确到秒(YYYY-MM-DD HH24:MI:SS)
                                   an_preSeconds IN NUMBER,--发生事故前n秒为复数
                                        an_aftSeconds IN NUMBER--发生事故后n秒
                                   )
   AS
     strSql    varchar2(2000);
     startTime varchar2(30);
     endTime   varchar2(30);
     calltime  varchar2(30);
     acidenttime date;
     ln_preSeconds NUMBER;
     ln_aftSeconds NUMBER;
   BEGIN
      if (an_acidentId is null) then
          RETURN;
      end if;
      if (at_acidentime is null) then
         acidenttime:=sysdate;
      else
         acidenttime:=to_date(at_acidentime,'YYYY-MM-DD HH24:MI:SS');
      end if;
      if ( an_preSeconds is null ) then
         ln_preSeconds :=ACIDENT_PRE_SECONDS;
       else
         ln_preSeconds:=an_preSeconds;
      end if;
      if ( an_aftSeconds is null ) then
         ln_aftSeconds :=ACIDENT_AFT_SECONDS;
       else
         ln_aftSeconds :=an_aftSeconds;
      end if;
      
      --计算事故发生时间at_acidentime之前an_preSeconds秒的时间
      startTime :=fc_getnextsecondstime(acidenttime,ln_preSeconds); --样式'yyyy-mm-dd hh24:mi:ss'
      --计算事故发生时间at_acidentime之后an_aftSecends秒的时间
      endTime   :=fc_getnextsecondstime(acidenttime,ln_aftSeconds); --样式'yyyy-mm-dd hh24:mi:ss'
      --计算作业调用时间与endtime相同
      calltime :=endTime || ' +8:00'; --样式'2008-07-10 10:01:00 +8:00'
   
      --构造作业执行程序,将各遥测表中按以上两个计算出来的时间取值,注入到事故追忆历史表
      
      strSql :='begin 
                 insert into ACIDNT_RETROS_HIS( ID, POINT_ID, POINT_IDENTIFIER, POINT_VALUE, GET_TIME, POINT_TYPE, ACCIDENT_ID)
                 select t1.ID || systimestamp, t1.POINT_ID, t1.POINT_IDENTIFIER,t1.POINT_VALUE,t1.GET_TIME,t1.POINT_TYPE, '|| an_acidentId ||' from ACIDNT_RETROS_TEMP t1;  
                 commit;  
                end;';
       --dbms_output.put_line(startTime);
       --dbms_output.put_line(endTime);
       dbms_output.put_line(calltime);
       dbms_output.put_line(strSql);
       
       --修改作业调用属性的job_type
       dbms_scheduler.set_attribute( name => 'WINDPOWER.WIND_JOB_SGZY', attribute => 'job_type', value => 'PLSQL_BLOCK'); 
       --修改作业调用属性的job_action
       dbms_scheduler.set_attribute( name => 'WINDPOWER.WIND_JOB_SGZY', attribute => 'job_action', value => strSql );   
       --修改作业调用调度属性的start_date    
       dbms_scheduler.set_attribute( 
        name => 'WINDPOWER.WIND_JOB_SGZY', 
        attribute => 'start_date', value => to_timestamp_tz(calltime, 'YYYY-MM-DD HH24:MI:SS TZH:TZM')); 
        --修改作业调用属性使其可用
  dbms_scheduler.enable( '"WINDPOWER"."WIND_JOB_SGZY"' ); 
   END;

http://topic.youkuaiyun.com/u/20080827/09/f119d3bb-0df6-449c-9d1a-4c9e15f22f6e.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值