Oracle定时器用法详解与案例

例子:每分钟向表里插入一条数据

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/(24
60)’ 每隔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;
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值