1、在DBMS_Jobs里新建一个Job
what里写上需调用的procedure或包名
interval是job运行间隔,sysdate+15/(24*60)表示每15分钟执行一次
2、设置好job后,还需要在procedure或包里加上逻辑判断,当天跑完一次就不再执行
procedure auto_run
is
V_INSERT_DATE VARCHAR2(20) ;
V_FLAG VARCHAR2(10) ;
V_pi_batch_dt VARCHAR2(10) := to_char(trunc((last_day(add_months(sysdate,-1)))),'YYYYMMDD') ; --上月最后一天
begin
--判断是否符合执行条件,不符合返回-1
l_chk_pt := 10;
SELECT max(insert_dt) insert_dt,max(flag)
INTO V_INSERT_DATE, V_FLAG
FROM monthly_report_check
where batch_type='M';
IF V_INSERT_DATE = V_pi_batch_dt AND V_FLAG = 'Y' THEN
--如果已经跑过了,就返回
RETURN;
ELSE
--否则,执行今天的代码
TODO....(代码块)
--执行到最后,一定要打上完成标记
insert into monthly_report_check
values(V_pi_batch_dt,'Y','M');
commit;
END IF;
END aotu_run;