SQL触发器创建定时任务执行时间以及时间间隔
DECLARE
JOB NUMBER;
BEGIN
DBMS_JOB.SUBMIT(
JOB => JOB,
WHAT => '需要执行的语句',
NEXT_DATE =>TO_DATE(TO_CHAR(‘2021/10/21’, 'YYYY/MM/DD')||' 10:00:00', 'YYYY-MM-DD HH24:MI:SS')
),--在2021年10月21上午十点执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60);--时间间隔为每分钟执行一次
END;
如果不加Interval => TRUNC(sysdate,'mi') + 1/ (24*60);
,则代表只执行一次,如果执行出现错误,比如“What“中写的语句有问题,定时任务就会重复执行几次。
以下是相关执行间隔
(1).每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
每小时执行
Interval => TRUNC(sysdate,'hh') + 1/ (24)
(2).每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate+ 1) +1/ (24)
(3).每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
(4).每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
(5).每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
(6).每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
(7).每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24
补充:
1、
NEXT_DAY(d,number)
–时间点d开始,下一个星期几的日期
–星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
2、
ADD_MONTHS(d,n)
–返回时间点d再加上n个月
3、
LAST_DAY(d)
–时间点d当月份最后一天
4、
TRUNC(d[,fmt])
5、对日期作截取
–举例当前时间是:2012-08-06 下午 04:39:00
①–返回2012-8-1当月的第一天
SELECT TRUNC(SYSDATE,'mm') FROM dual
②–返回2012-1-1当年第一天
SELECT TRUNC(SYSDATE,'yy') FROM dual
③–返回2012-8-6当天
SELECT TRUNC(SYSDATE,'dd') FROM dual
④–返回2012-8-5当周第一天
SELECT TRUNC(SYSDATE,'day') FROM dual
⑤–返回2012-8-6不填参数就默认是当天
SELECT TRUNC(SYSDATE) FROM dual
⑥–返回2012-8-6下午04:00:00当前小时
SELECT TRUNC(SYSDATE,'hh') FROM dual
⑦–返回2012-8-6下午04:39:00当前分钟
SELECT TRUNC(SYSDATE,'mi') FROM dual