oracle定时任务

create  table  testJob(

id number,

create_date date

);

create  or  replace  procedure  test_pro is

begin

  insert into  testJob(id,create_date) values(seq_testjob.nextval,sysdate );

end;

create sequence seq_testjob

       maxvalue 999999999999

       start with 12

       increment by 1

       cache 20;

 

select  * from  testjob;

创建定时任务

 var job_num number;

 begin

    dbms_job.submit(:job_num,'test_pro;',SYSDATE,'sysdate+2/24/60');

 end;

修改定时任务

var job_num number;

 begin

    dbms_job.change(84,'pro_stock_stop_in;',SYSDATE,'trunc(last_day(sysdate))+20/24');

 end;

查询定时任务

select   *   from   user_jobs;

暂定

job:dbms_job.broken(job,broken,nextdate); 

禁用

exec dbms_job.broken(21,true);

启用

 exec dbms_job.run(21);

每天午夜12点            'TRUNC(SYSDATE + 1)' 

每天早上8点30分         'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' 

每星期二中午12点         'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24' 

每个月第一天的午夜12点    'TRUNC(LAST_DAY(SYSDATE ) + 1)' 

每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24' 

每星期六和日早上6点10分    'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'

DBA_JOBS

===========================================

字段(列)          类型                 描述 

JOB                NUMBER          任务的唯一标示号 

LOG_USER           VARCHAR2(30)    提交任务的用户 

PRIV_USER          VARCHAR2(30)    赋予任务权限的用户 

SCHEMA_USER        VARCHAR2(30)    对任务作语法分析的用户模式 

LAST_DATE          DATE            最后一次成功运行任务的时间 

LAST_SEC           VARCHAR2(8)     如HH24:MM:SS格式的last_date日期的小时,分钟和秒 

THIS_DATE     DATE            正在运行任务的开始时间,如果没有运行任务则为null 

THIS_SEC     VARCHAR2(8)     如HH24:MM:SS格式的this_date日期的小时,分钟和秒 

NEXT_DATE          DATE            下一次定时运行任务的时间 

NEXT_SEC           VARCHAR2(8)     如HH24:MM:SS格式的next_date日期的小时,分钟和秒 

TOTAL_TIME         NUMBER          该任务运行所需要的总时间,单位为秒 

BROKEN             VARCHAR2(1)     标志参数,Y标示任务中断,以后不会运行 

INTERVAL           VARCHAR2(200)   用于计算下一运行时间的表达式 

FAILURES    NUMBER     任务运行连续没有成功的次数 

WHAT               VARCHAR2(2000)  执行任务的PL/SQL块 

CURRENT_SESSION_LABEL RAW          MLSLABEL 该任务的信任Oracle会话符 

CLEARANCE_HI      RAW MLSLABEL     该任务可信任的Oracle最大间隙 

CLEARANCE_LO      RAW              MLSLABEL 该任务可信任的Oracle最小间隙 

NLS_ENV           VARCHAR2(2000)   任务运行的NLS会话设置 

MISC_ENV          RAW(32)          任务运行的其他一些会话参数

 

每天运行一次

'SYSDATE + 1'

每小时运行一次

'SYSDATE + 1/24'

每10分钟运行一次

'SYSDATE + 10/(60*24)'

每30秒运行一次

'SYSDATE + 30/(60*24*60)'

每隔一星期运行一次

'SYSDATE + 7'

不再运行该任务并删除它

NULL

每天午夜12点

'TRUNC(SYSDATE + 1)'

每天早上8点30分

'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'

每星期二中午12点

'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'

每个月第一天的午夜12点

'TRUNC(LAST_DAY(SYSDATE ) + 1)'

每个季度最后一天的晚上11点

'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'

每星期六和日早上6点10分

'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'

 select  TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'MM' ) -1/24  from  dual;

 

 select  trunc(last_day(sysdate))+8/24  from  dual;

 

表达式可以通过查询获得

CREATE OR REPLACE PROCEDURE pro_stock_stop_in  IS

 BEGIN

   insert into stock_stop_in(ym,year,monthinfo,stop_amount,amount,rate,gt_rate)

 select to_char(sysdate, 'yyyy-mm') ym, to_char(sysdate, 'yyyy') year,

  to_number(to_char(sysdate, 'mm')) monthinfo, sum(t1.amount) stop_amount,

  sum(t2.amount) amount, round(sum(t1.amount) /nvl(sum(t2.amount), 1), 4) rate, 0.02 GT_RATE

   from (

     select sum(ssd.jy_num * ssd.device_amount) amount  from stock_batch sb

           inner join stock_surplus_batch_detail ssd on sb.batch = ssd.batch  and ADD_MONTHS(sysdate, -6) > sb.create_time    and ssd.jy_num > 0   ) t1,

                 (   select   sum(amount) amount from  contract_orders  o where to_char(o.create_date,'yyyy')=to_char(sysdate,'yyyy')   ) t2;

END;

 var job_num number;

 begin

    dbms_job.submit(:job_num,'pro_stock_stop_in;',trunc(last_day(sysdate))+21/24,'trunc(last_day(sysdate))+21/24');

 end;

 var job_num number;

 begin

    dbms_job.change(84,'pro_stock_stop_in;',trunc(last_day(sysdate))+21/24,'trunc(last_day(sysdate))+21/24');

 end;

 

你可能感兴趣的:(oracle)