Oracle基础知识(二) - Oracle 中Job的使用

在Java中有定时任务这一概念,也有很多的任务调度框架,在Oracle中,也有定时任务,就是Job。

1.什么情况下会使用job

job一般用来定时执行一些操作,比如执行一些存储过程。

2.简单使用job

在这里,简单介绍一下,怎样使用JOB

2.1 新建一个测试表

就2个简单的字段:id 和创建时间

create table t_ygy_demo_hellojob
(
       id number,
       createtime date
)

2.2 创建一个序列

上面的表中,ID自增

create sequence s_ygy_demo_hellojob
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 20;

2.3 创建存储过程

这里的存储过程,用来插入一条记录。

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;

到这里为止,都很顺利,下面就要开始JOB相关的了。

2.4 创建JOB

declare job number;
begin
sys.dbms_job.submit(job,'proc_ygy_demo_hellojob;',sysdate,'sysdate+1/1440');
end;

这里使用了dbms_job 包下的子过程 submit();

这里简要说明一下 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并没有执行,还需要下一步。

2.5 运行JOB

begin 
sys.dbms_job.run(263);
end;

这里使用了dbms_job包下的子过程 run();

这里说明一下run()过程:

PROCEDURE Run(job IN binary_ineger) 
这里只有一个参数,就是要运行的JOB的编号,这是唯一的。

如示例中的263,就是我这里job的ID。


执行完这一步,定时任务已经开始了,上面的任务是1分钟执行一次,可以查询创建的表来看数据记录。


3. DBMS_JOB包下的子过程介绍

3.1 查看系统中的JOB

SELECT *FROM USER_JOBS;

通过这里命令,可以查看所有的JOB,还有在上面运行JOB的时候,需要一个JOB的ID,也可以通过这里命令得到。

3.2  删除一个JOB

dbms_job.remove(jobno);

3.3 修改JOB执行的存储过程

dbms_job.what(jobno,what);

3.4 修改下次执行时间

dbms_job.next_date(jobno,next_date);

3.5 修改执行频度

dbms_job.interval(jobno,interval);

3.6 停止JOB

begin
sys.dbms_job.broken(jobno,true);
end;


你可能感兴趣的:(oracle,job,定时)