ORACLE中JOB的使用

蹲街弑〆低调 提交于 2019-11-26 14:42:32

JOB:和JAVA中的job类似,都是定时任务。

首先,建表:

-- Create table
create table MYDAILYDK
(
  ID     NUMBER(19) not null,
  NAME   VARCHAR2(255),
  DKTIME DATE
)
tablespace NG_DATA
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

然后,建个存储过程,用来向表里插入数据:

create or replace procedure mbproc_mydailydk

as

begin

insert into mydailydk(id,name,dktime)
values(s_madailydk.nextval,'小明',sysdate);
commit;

end;

JOB参数简介:

/**    job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。 
    what参数是将被执行的PL/SQL代码块。 
    next_date参数指识何时将运行这个工作。 
    interval参数何时这个工作将被重执行。 
    no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE 
    指示此PL/SQL代码在它第一次执行时应进行语法分析, 
    而FALSE指示本PL/SQL代码应立即进行语法分析。
    */

创建JOB:

begin
  sys.dbms_job.submit(job => :job,
                      what => 'mbproc_mydailydk;',
                      next_date => to_date('08-11-2016 14:22:08', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate+1');
  commit;
end;

说明:ORACLE会自动生成唯一的JOB标识,就是submit的第一个参数。

查看创建的job:


     select * from user_jobs;

手动运行Job,参数为自动生成的唯一标识,我的是64,把:job换成64即可,由于我的开始时间是sysdate,手动每天的这个时候去执行一次,因此查看存储过程中插入的表会有一条数据插入:

  begin
  dbms_job.run(:job);
  end;

查看被插入的表:


     select * from mydailydk;

停止job:

  begin
     
       dbms_job.broken(64, true);
     
  end;

删除job:

  begin
     
       dbms_job.remove(64);
     
  end;

另外,关于 dbms_job 这个pakage中的其它函数请自行查阅:change()、Interval()、Isubmit()、Next_Date()等等。

附上pakage的文档的连接:

https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_job.htm#i1000681

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!