--Oracle 定时执行存储过程
-- 时间 设定 复制右边函数
-- 每分钟执行一次 'sysdate+1/1440'
-- 每天 1点执行 'TRUNC(sysdate) + 1 +1/ (24)' 如果设定当天2点执行 'TRUNC(sysdate) + 1 +2/(24)'
--每天午夜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)'
--每月25号00:00执行: 'TRUNC(LAST_DAY(SYSDATE ) + 25)'
--首先创建执行计划
DECLARE
plan INTEGER;
BEGIN
DBMS_JOB.SUBMIT(plan,'存储过程名称;',sysdate, 时间);
END;
--查询 计划编号,执行的存储过程, 设定的执行时间
select job,what,interval from user_jobs;
--执行计划 查询需要计划的计划 运行 run(user_jobs.job)函数
BEGIN
DBMS_JOB.run(计划编号);
END;
--查询 所有计划的下一次执行时间 加上 where job=计划编号 查询特定计划的下一次执行时间
select job,next_date,what from dba_jobs
--暂停执行计划
BEGIN
DBMS_JOB.BROKEN(计划编号,True);
END;
--移除计划
BEGIN
DBMS_JOB.REMOVE(计划编号);
END;
--修改计划执行时间 先移除计划 重新创建计划 否则会有2个不同时间的计划同时执行