DECLARE
test_job NUMBER;
begin
sys.dbms_job.submit(job => test_job,
what => 'abc;', 此处为存储过程,要打;否则报错
next_date => sysdate, 此处为下次调用时间
interval => 'trunc(sysdate,''hh'')+(60+5)/(24*60)');时间间隔
commit;
end;
interval 设置:
每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/(24*60)
每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/(24)
每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'), 12)+1/24
job操作:
删除job: dbms_job.remove(jobno); -- jobno任务号
修改要执行的操作 job: dbms_job.what(jobno, what); --指定任务号以及存储过程
修改下次执行时间: dbms_job.next_date(jobno, next_date); --指定任务号的时间
修改间隔时间: dbms_job.interval(jobno, interval); --指定任务号的间隔时间
启动job: dbms_job.run(jobno); --指定任务号启动
停止job: dbms.broken(jobno, broken, nextdate); –broken为boolean值,true停止,停止以后可以查看job的BROKEN字段来判断,N为运行,Y代表停止
查看job:SELECT * FROM dba_jobs;
举例说明:
创建表:
create table A(
aa varchar2(10)
);
测试表:select * from a;
创建存过:
create or replace PRocedure test_pro
AS
BEGIN
insert into a(aa) values('123');
commit;
end test_pro;
测试存过:call test_pro();
创建定时任务:
DECLARE
test_job NUMBER;(此处可以指定no, test_job number := 1; )
begin
sys.dbms_job.submit(test_job,
'test_pro;',
sysdate,
'TRUNC(sysdate,''mi'') + 1 / (24*60)');
commit;
end;
查看定时任务:
SELECT * FROM dba_jobs;看状态
一分钟后查看表是否多一条数据即可。
最后删除任务:
begin
dbms_job.remove(103);
commit;
end;