Oracle dbms_job

Oracle dbms_job 可以在指定的时间点或每天的某个时间点自行执行任务。可以在数据库级别上实现定时任务,用来定时调用存储过程是一个不错的解决方案。

语法

使用dbms_job.submit方法过程,这个过程有五个参数:job、what、next_date、interval与no_parse。

dbms_job.submit(
job OUT binary_ineger,
What IN varchar2,
next_date IN date,
interval IN varchar2,
no_parse IN booean:=FALSE)

job参数是输出参数,由submit()过程返回的binary_ineger,这个值用来唯一标识一个工作。一般定义一个变量接收,可以去user_jobs视图查询job值。
what参数是将被执行的PL/SQL代码块,存储过程名称等。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——true,默认值false。指示此PL/SQL代码在它第一次执行时应进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析。

创建一个存储过程

 create or replace procedure p_test_job  is
 begin
 insert into aaaa_batchinfo
  values
    (AAAA_BATCHINFO_SEQ.nextval,
     1,
     sysdate(),
     1,
     sysdate());
end;

--需要调用一下,使得存储过程生效
call p_test_job();

创建 dbms_job

--新建 job  其中第二个参数;号必须带上
declare job_test number;   
begin
    -- sysdate+1  每天凌晨执行
    dbms_job.submit(job_test,'p_test_job;',sysdate,'sysdate+1');
    commit;
end; 

关于 dbms_job 的一些常用命令

--查看所有的 job
select job,log_user,to_char(last_date,'yyyy-mm-dd hh24:mi:ss') last_date,
to_char(next_date,'yyyy-mm-dd hh24:mi:ss') next_date,interval,what
from user_jobs

--如果 last_date 没有值
--需要手动执行一次,这样才能正确的使 job 定时执行
execute dbms_job.run(25);

--删除 job
execute dbms_job.remove(25);

--job_queue_processes参数,当设定该值为0的时候则任意方式创建的job都不会运行。
show parameters job;
alter system set job_queue_processes = 6;

关于执行时间的一些参数

执行时间 INTERVAL参数值
每天凌晨0点执行 TRUNC(SYSDATE + 1)
每天早上8点执行 TRUNC(SYSDATE + 1) +(860)/ (2460)
每星期日中午12点 NEXT_DAY(TRUNC(SYSDATE ),''SUNDAY'' ) + 12/24
每个月第一天的午夜12点 TRUNC(LAST_DAY(SYSDATE ) + 1)

本文由个人 hexo 博客 co2fe.com 迁移
date: 2017-10-15 12:33:31

posted @ 2018-12-28 15:39  LiuChengloong  阅读(867)  评论(0编辑  收藏  举报