ITPub博客

首页 > 数据库 > Oracle > Oracle Job定时执行任务

Oracle Job定时执行任务

原创 Oracle 作者:zhenghaishu 时间:2015-09-29 12:44:14 0 删除 编辑

Oracle Job定时执行任务

 

需求:

system用户下创建一个表,每隔10秒插入一条测试数据。

 

思路:

可以用Oracle job来实现。

 

步骤:

1 创建表格

create table system.test20150929

(

 myseq number(5) primary key,

 mydate date

)

 

2 创建存储过程test_proc

CREATE OR REPLACE PROCEDURE test_proc IS

BEGIN

  INSERT INTO SYSTEM.TEST20150929(MYSEQ, MYDATE)  VALUES(NVL((SELECT MAX(MYSEQ) FROM SYSTEM.TEST20150929) + 1, 0), SYSDATE);

  COMMIT;

EXCEPTION

  WHEN OTHERS THEN

    DBMS_OUTPUT.PUT_LINE('Exception happened, data was rollback');

    ROLLBACK;

END;

/

 

对应的删除过程的语句为

drop procedure test_proc;

 

3 检查oraclejob队列的进程数,要确保不为0。因为0表示不运行job

show parameter job_queue_processes;

 

 

若为0,则可以用以下语句修改

alter system set job_queue_processes=20 scope=both;

 

 

4 创建定时执行任务

假如要求每3分钟插入一条数据,实际上就是要每3分钟执行一次存储过程test_proc

var job_num number;

begin

   dbms_job.submit(:job_num,'test_proc;',SYSDATE,'sysdate+3/24/60');

end;

/

commit;

 

注意,这里要执行commit

 

submit过程中有五个参数:jobwhatnext_dateintervalno_parse

PROCEDURE submit ( job OUT binary_ineger,   

                                      what IN varchar2,

                                      next_date IN date,

                                      interval IN varchar2,

                                      no_parse IN booean:=FALSE)

job参数是由submit()过程返回的binary_integer。这个值用来唯一标识一个工作。

what参数是将被执行的PL/SQL代码块。这里是存储过程的名称,后面有一个英文状态下的分号一定要加上;

next_date参数指识何时将运行这个工作。

interval参数何时这个工作将被重执行。 这里加号、括号都必须在英文状态下输入;

no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE 指示此PL/SQL代码在它第一次执行时应进行语法分析, FALSE指示本PL/SQL代码应立即进行语法分析。

 

5 查看job是否创建成功

这里由于dba_jobs里的字段很多,为了省去格式的麻烦,用PL/SQL Developer查询。

 

上图可以看出,最后一行JOB字段值为27的就是我们新创建的JOB。说明创建成功了。这个JOB字段其实就是上面创建语句中的job_numjob_num在删除job时要用到。

 

6 查看插入数据

 

7 删除job

exec dbms_job.remove(27);

commit;

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29485627/viewspace-1811510/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-02-14

  • 博文量
    112
  • 访问量
    897437