根据输入时间判断实际执行时间创建job-1221


declare
  jobno           binary_integer;
  rm_days         number;
  rm_hour         number; --传入的hour
  my_hour         number; --取出当前时间的hour
  my_interval_day number;
  my_interval     varchar2(20);

  my_sql       varchar2(200);
  my_next_date varchar2(200);
  my_yymmdd    varchar2(200);
  my_own_sql   varchar2(2000);

begin
  rm_days         := 30;
  rm_hour         := 9;
  my_interval_day := 100;
  my_sql          := '''delete from log_info_bak where currenttime <sysdate-' ||
                     rm_days || ';''';
  --  dbms_output.put_line('my_sql is: '||my_sql);

  --判断两个hour 
  select to_number(to_char(sysdate, 'hh24')) into my_hour from dual;

  --16          18
  if rm_hour < my_hour then
    rm_hour := rm_hour;
    select to_char(sysdate + 1, 'yyyy-mm-dd') into my_yymmdd from dual;
  
    my_next_date := 'to_date(''' || my_yymmdd || ' ' || rm_hour ||
                    ':00:00'' ,''yyyy-mm-dd hh24:mi:ss'')';
    --20        18
  elsif rm_hour > my_hour then
    select to_char(sysdate, 'yyyy-mm-dd') into my_yymmdd from dual;
    my_next_date := 'to_date(''' || my_yymmdd || ' ' || rm_hour ||
                    ':00:00'' ,''yyyy-mm-dd hh24:mi:ss'')';
  
  end if;

  --dbms_output.put_line('my_next_date is:'||my_next_date);

  my_interval := '''sysdate+' || to_char(my_interval_day) || '''';

  --dbms_output.put_line('my_interval is: '||my_interval);

  my_own_sql := ' declare 
jobno binary_integer; 
begin 
  dbms_job.submit(job => jobno,what => ' || my_sql || ',
  next_date => ' || my_next_date || ',
  interval =>' || my_interval || '); 
  commit; 
  end;';
  --dbms_output.put_line(my_own_sql);

  execute immediate my_own_sql;

end;

--测试部分
/*
系统 time 11:00:00   任务时间 9点   结果 执行时间推迟到 to_date('2016-12-21 9:00:00' ,'yyyy-mm-dd hh24:mi:ss')
系统 time 9:00:00    任务时间 11点   结果 执行时间推迟到 to_date('2016-12-20 11:00:00' ,'yyyy-mm-dd hh24:mi:ss') 
*/
 

创建时间:2022-04-02 15:05
浏览量:0