Oracle 数据库添加定时事件

程序设计中可能会碰到想要定时执行某段操作的情况,例如:

    每月清空某张表的数据;

    每年重新提取一次某张表的数据等。

这种情况可以通过设置数据库的定时任务来实现,步骤如下:

(1)首先检查数据库进程数 为0标识不运行job

    show parameter Job_queue_processes        //检查进程数语句 (命令窗口执行)
            如果value的值是0,那么执行如下命令:
        alter system set job_queue_processes=10 scope=both    //设置进程数

(2)创建存储过程(要定时执行的操作)

CREATE OR REPLACE PROCEDURE PAK_YCSY_UPDATE (nian varchar2)

                   IS

                   BEGIN

                         delete from YCSY_JSGZYF where DBND=nian;

                         insert into YCSY_JSGZYF select JSLB,DBMJ,nian,SEQ from YCSY_JSGZYF where YCSY_JSGZYF.DBND=to_number(nian)-1;

                            commit;

                   exception

                       when others then

                 rollback;

                   END ;

(3)制定定时任务

                  var job_num number;

                   begin

                            dbms_job.submit(:job_num,'PAK_YCSY_UPDATE (substr(sysdate,1,4));',SYSDATE,'TRUNC(LAST_DAY(SYSDATE))+1+2/24');

                   end;

                   /

 

                   PAK_YCSY_UPDATE (substr(sysdate,1,4));      :调用存储过程

                   TRUNC(LAST_DAY(SYSDATE))+1+2/24              :触发间隔时间

                            ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24                每年1月1日1点

                            ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24                  每年7月1日和1月1日凌晨1点

                            TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24                         每季度的第一天凌晨1点执行

                            TRUNC(LAST_DAY(SYSDATE))+1+1/24                                 每月1日凌晨1点执行

                            TRUNC(next_day(sysdate,'星期一'))+1/24                       每周一凌晨1点执行

                            TRUNC(sysdate+ 1)  +1/ (24)                                     每天定时执行

                            TRUNC(sysdate,'hh') + 1/ (24)                                      每小时执行

                            TRUNC(sysdate,'mi') + 1/ (24*60)                     每分钟执行

 

                   注意:执行完成后提交。

(4)查看定时任务

select*from dba_jobs

(5)删除定时任务      

 exec dbms_job.remove(24);             //括号中为任务编号

猜你喜欢

转载自www.cnblogs.com/yang-blogs/p/9724685.html