在Java中有定时任务这一概念,也有很多的任务调度框架,在Oracle中,也有定时任务,就是Job。
job一般用来定时执行一些操作,比如执行一些存储过程。
在这里,简单介绍一下,怎样使用JOB
就2个简单的字段:id 和创建时间
create table t_ygy_demo_hellojob ( id number, createtime date )
上面的表中,ID自增
create sequence s_ygy_demo_hellojob minvalue 1 maxvalue 999999999 start with 1 increment by 1 cache 20;
这里的存储过程,用来插入一条记录。
create or replace procedure proc_ygy_demo_hellojob as begin insert into t_ygy_demo_hellojob(id , createtime) values(s_ygy_demo_hellojob.nextval , sysdate); end;
declare job number; begin sys.dbms_job.submit(job,'proc_ygy_demo_hellojob;',sysdate,'sysdate+1/1440'); end;
这里简要说明一下 submit()过程:
PROCEDURE Submit ( job OUT binary_ineger, what IN varchar2, next_date IN date, interval IN varchar2, no_parse IN booean:=FALSE)
job:由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作
what:要执行的存储过程(PL/SQL代码块)
next_date: 下一次要执行的时间
interval:该JOB重复执行的频度
no_parse: 为TRUE表示此PL/SQL代码在它第一次执行时应进行语法分析, 而FALSE表示本PL/SQL代码应立即进行语法分析。默认为false
到这一步的时候,并该JOB并没有执行,还需要下一步。
begin sys.dbms_job.run(263); end;
这里使用了dbms_job包下的子过程 run();
这里说明一下run()过程:
PROCEDURE Run(job IN binary_ineger)这里只有一个参数,就是要运行的JOB的编号,这是唯一的。
如示例中的263,就是我这里job的ID。
执行完这一步,定时任务已经开始了,上面的任务是1分钟执行一次,可以查询创建的表来看数据记录。
SELECT *FROM USER_JOBS;
dbms_job.remove(jobno);
dbms_job.what(jobno,what);
dbms_job.next_date(jobno,next_date);
dbms_job.interval(jobno,interval);
begin sys.dbms_job.broken(jobno,true); end;