例子:每分钟向表里插入一条数据
1.创建一个存储过程,插入USER表一条数据
create or replace procedure AUTO_INSERT_TIMESTAMP AUTHID CURRENT_USER IS;
begin
//插入一条数据
INSERT INTO USER("ID", "USER_ID", "CERT_NO", "CERT_NOTAFTER_TIME", "REMARK", "STATUS", "CREATE_TIME")
values('11111','userid','certid',20202222,'REMARK',1,20201111);
//提交
commit;
end AUTO_INSERT_TIMESTAMP;
2.创建一个定时器,每分钟触发一次存储过程插入一条数据
JOB => job, 自动生成JOB_ID
WHAT => ‘AUTO_INSERT_TIMESTAMP;’,需要执行的存储过程名称或SQL语句
NEXT_DATE => sysdate+3/(2460), 初次执行时间-下一个3分钟
INTERVAL => ‘trunc(sysdate,’‘mi’')+1/(2460)’ 每隔1分钟执行一次
declare
job number;
BEGIN
DBMS_JOB.SUBMIT(
JOB => job, /*自动生成JOB_ID*/
WHAT => 'AUTO_INSERT_TIMESTAMP;', /*需要执行的存储过程名称或SQL语句*/
NEXT_DATE => sysdate+3/(24*60), /*初次执行时间-下一个3分钟*/
INTERVAL => 'trunc(sysdate,''mi'')+1/(24*60)' /*每隔1分钟执行一次*/
);
commit;
end;
INTERVAL 相关时间处理
Interval => trunc(sysdate,’mi’) + 1 / (24*60) ; --每分钟执行
Interval => trunc(sysdate) + 1 +2 / (24); --每天定时执行:每天的凌晨2点执行
Interval => trunc(next_day(sysdate,2))+2/24 --每周定时执行:每周一凌晨2点执行(周一为一周的第二天)
Interval =>trunc(LAST_DAY(SYSDATE))+1+2/24; --每月定时执行:每月1日凌晨2点执行
Interval => trunc(ADD_MONTHS(SYSDATE,3),‘Q’) + 2/24; --每季度定时执行:每季度的第一天凌晨2点执行
Interval => ADD_MONTHS(trunc(sysdate,‘yyyy’),6)+2/24; --每半年定时执行:每年7月1日和1月1日凌晨2点
Interval =>ADD_MONTHS(trunc(sysdate,‘yyyy’),12)+2/24; --每年定时执行:每年1月1日凌晨2点执行
Job相关处理
id:下图的JOB字段对应的值,job的id
dbms_job.remove(id); --根据id删除某个定时器
dbms_job.run(id); --启动定时器
dbms_job.broken(id,true) --true Y 定时器状态停止 ;false N 定时器状态运行。数据库存N,Y如下图
dbms_job.next_date(id,to_date(‘2020-08-03 22:00:00’,‘yyyy-mm-dd hh24:mi:ss’)) --修改定时器的下次执行时间
dbms_job.interval(id,‘sysdate+1/24’) --修改定时器的间隔时间
dbms_job.what(id,‘AUTO_INSERT_TIMESTAMP ;’) --修改定时器的存储过程
查询job相关信息
select * from user_jobs;