如果想让oracle 数据库定时执行一个什么任务,可以用如下的方法实现:
上例子:
准备东西:
- create table t3(k integer primary key, d date); -- 例子表
- create sequence seq_test start with 1 increment by 1; --例子序列
- create or replace procedure insert_into_t3 as --例子过程
- begin
- insert into t3 (k, d) values (seq_test.nextval, sysdate); --把t1里面的相关数据插到t2中
- commit; --插入一条记录commit一次
- end;
下面的代码,将每分钟执行一下上面的insert_into_t3过程
- var job number;
- begin
- dbms_job.submit(
- job => :job,
- what => 'insert_into_t3;',
- next_date => to_date('2014-06-17 12:35:00','yyyy-MM-dd hh24:mi:ss'),
- interval => 'sysdate+1/(24*60)'
- );
- commit ;
- end;
可以通过下面的语句查询一下任务列表:
- SELECT * from user_jobs order by next_date;
如果想手动触发一下任务,可以用如下语句:
- begin
- dbms_job.run(jobNum);
- end;
- /
通过下面的语句删除任务
- begin
- dbms_job.remove(jobNum);
- end;
- /
注意:有一个系统参数需要特别注意:job_queue_processes
如果 show parameter job_queue_processes 显示其值为0,则定时任务不会执行。
需要用如下语句给它设置一个>0的值。例如:
alter system set job_queue_processes=10 ;