程序设计中可能会碰到想要定时执行某段操做的状况,例如:数据库
每个月清空某张表的数据;spa
每一年从新提取一次某张表的数据等。设计
这种状况能够经过设置数据库的定时任务来实现,步骤以下:code
(1)首先检查数据库进程数 为0标识不运行jobblog
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)制定定时任务rem
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) 每分钟执行
注意:执行完成后提交。it
(4)查看定时任务io
select*from dba_jobs
(5)删除定时任务 程序设计
exec dbms_job.remove(24); //括号中为任务编号