使用oracle数据库执行定时任务(添加、修改、删除)可采用定时执行存储过程来是实现。
1、创建存储过程
create or replace procedure test as
begin
insert into test values(xxx,xxx,xxx);
commit;
end;
具体请参考 oracle存储过程
2、创建执行计划
参数说明:
declare
jobno number;
begin
DBMS_JOB.SUBMIT
(jobno => -- jobno,定时器ID,系统自动获得,也可进行指定
what => 'your_procedure;', --调用的存储过程名称
next_date => sysdate, -- 设置的时间是由系统自动生成,可以根据自己的需要设置该时间
interval => 'sysdate+1+5/(24)');--多长时间调用一次,时间间隔是每小时,根据需要可以自己设置
commit;
end;
具体写法为:
declare
jobno number;
begin
dbms_job.submit(jobno,
'存储过程名称;',
sysdate,
'定时执行时间');-- trunc(sysdate+1) +3/24 每天凌晨3点
commit;
end;
3、查看定时计划
定时计划创建后可查询user_jobs表查看创建的任务
select * from user_jobs; -- 当前用户拥有的任务
select * from dba_jobs; -- 本数据库中定义到任务队列中的任务
select * from DBA_JOBS_RUNNING; -- 目前正在运行的任务
user_jobs表字段详解
4、对创建的定时计划进行操作
一下内容中的jobno为user_jobs表的唯一标识号(JOB)
4.1停止执行计划
Declare
jobno Integer;
Begin
dbms_job.broken(jobno,True); -- 停止计划,不再继续执行
dbms_job.broken(jobno,True,Sysdate+(2/24/60));-- 停止计划,并在两分钟后继续执行 根据业务场景写一个即可
end;
4.2运行执行计划
Declare
jobno Integer;
Begin
dbms_job.run(jobno); -- 运行制定的执行计划
end;
4.3删除执行计划
Declare
jobno Integer;
Begin
dbms_job.remove(jobno);
end;
4.4修改执行计划的间隔时间
Declare
jobno Integer;
Begin
dbms_job.interval(jobno, 'sysdate+1/(24*60)'); -- 修改为:每分钟执行一次
end;
4.5修改要执行的操作:
Declare
jobno Integer;
Begin
dbms_job.what(jobno, what); --指定任务号以及存储过程
end;
4.6修改下次执行时间:
Declare
begin
dbms_job.next_date(jobno, next_date); --指定任务号的时间
end;
5、运行时间(interval)的计算
通用公式 :那一天 + (几时*60+几分)/(24*60)
例如: 每天的9点20 TRUNC(SYSDATE+1) + (9*60+20)/(24*60)
天数表达式参考:
每天:TRUNC(SYSDATE+1)
每周:TRUNC(SYSDATE+7)
每月:TRUNC(SYSDATE+30)
注:TRUNC(SYSDATE ) 表示的是今天的0点0分0秒 SYSDATE 表示当前时间
表达式参考
sysdate+1 表示每天执行一次
sysdate+1/24 表示每小时执行一次
sysdate+1/(24*60) 表示每分钟执行一次
sysdate+1/(24*60*60) 表示每秒执行一次