玖叶教程网

前端编程开发入门

Oracle定时任务(oracle定时任务每天凌晨零点)


1、先创建一张JOB_TEST表,字段为a,日期格式

CREATE TABLE JOB_TEST(a DATE)

2、创建一个存储过程JOB_PRO_TEST,作用是往JOB_TEST表中插入数据

CREATE OR REPLACE PROCEDURE JOB_PRO_TEST AS
BEGIN
    INSERT INTO JOB_TEST VALUES (SYSDATE);
END;

3、创建一个job,名称为job2022 ;作用是每30分钟执行一次存储过程JOB_PRO_TEST。

DECLARE
    job2022 NUMBER;
BEGIN
    dbms_job.submit(
            JOB => job2022,  		/*自动生成JOB_ID*/  
        	  WHAT => 'JOB_PRO_TEST;',  
            NEXT_DATE => to_date('2022-09-14 15:40:00', 'yyyy-mm-dd hh24:mi:ss'),
            INTERVAL => 'sysdate+30/(24*60)' /*每隔30分钟执行一次*/        
    );
    COMMIT;
END;

参数含义:

JOB:指定定时任务的 JOB_ID,上面代码指自动生成;

WHAT:需要执行的存储过程名称或SQL语句,多个以分号隔开,注意最后有个分号;

NEXT_DATE:初次执行时间;

INTERVAL:多久执行一次。

4、查询定时任务

-- 查看调度任务
select * from user_jobs;
-- 查看正在执行的调度任务
select * from dba_jobs_running;
-- 查看执行完的调度任务
select * from dba_jobs;

5、定时任务的操作

(1)运行job2022

BEGIN
    dbms_job.run(:job2022);
    commit;
END;

(2)停止定时任务

BEGIN
     dbms_job.broken(:job2022,true,sysdate); 
     commit;
END;

(3)删除定时任务

BEGIN
    dbms_job.remove(:job2022);
    commit;
END;

6、Interval的描述


1:每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
或
Interval => sysdate+1/1440
 
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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言