侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 19 条评论

目 录CONTENT

文章目录

Oracle DBMS_JOB包的使用

与晚风述往事
2021-10-07 / 0 评论 / 0 点赞 / 603 阅读 / 3,345 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-10-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

DBMS_JOB包介绍

DBMS_JOB程序包主要是调度和管理作业队列中的作业。换句话说,其实就是用来管理定时任务的程序包。

Oracle推荐使用DBMS_SCHEDULER包来替代DBMS_JOB包。

DBMS_JOB包中的存储过程使用

DBMS_JOB程序包中主要有以下存储过程:

  • BROKEN
  • CHANGE
  • INSTANCE
  • INTERVAL
  • NEXT_DATE
  • REMOVE
  • RUN
  • SUBMIT
  • USER_EXPORT
  • WHAT

接下来具体说明这些存储过程的使用。

BROKEN

broken存储过程永久的禁用job的执行,就类似于冻结这个job。禁用之后,数据库中还会保留它,但即使满足条件也不会再调用。

语法:

DBMS_JOB.BROKEN ( 
   job       IN  BINARY_INTEGER,
   broken    IN  BOOLEAN,
   next_date IN  DATE DEFAULT SYSDATE);

参数说明:

  • job 定时任务的标识符ID。
  • broken 设置定时任务是否禁用。设置为true表示禁用,false表示启用。
  • next_date 定时任务的下一次运行时间。

示例:

begin
  dbms_job.broken(204,true);
  commit;
end;

CHANGE

change存储过程用于更改现有job的参数。

语法:

DBMS_JOB.CHANGE ( 
   job       IN  BINARY_INTEGER,
   what      IN  VARCHAR2,
   next_date IN  DATE,
   interval  IN  VARCHAR2,
   instance  IN  BINARY_INTEGER DEFAULT NULL,
   force     IN  BOOLEAN DEFAULT FALSE);

参数说明:

  • job 定时任务的标识符ID。
  • what 要运行的PL/SQL存储过程。
  • next_date job下一次要运行的时间。
  • interval job运行的时间间隔。
  • instance 执行job的实例;默认值为null,表示当前实例(当前参数不做任何改变)。
  • force 实例是否验证。如果为true,则指定的实例必须正在运行,否则,该存储过程会报错;如果为false(默认值),则任何正整数都可以作为job实例。(包括null)

示例:

begin
  dbms_job.change(210,null,null,'sysdate+30/86400',1,true);
  commit;
end;

INSTANCE

instance存储过程更改现有job的运行实例。

语法:

DBMS_JOB.INSTANCE ( 
   job        IN BINARY_INTEGER,
   instance   IN BINARY_INTEGER,
   force      IN BOOLEAN DEFAULT FALSE);

参数说明:

  • job 定时任务的标识符ID。
  • instance 执行job的实例;默认值为null,表示当前实例(当前参数不做任何改变)。
  • force 实例是否验证。如果为true,则指定的实例必须正在运行,否则,该存储过程会报错;如果为false(默认值),则任何正整数都可以作为job实例。(包括null)。

示例:

begin
  dbms_job.instance(210,1,false);
  commit;
end;

INTERVAL

interval存储过程更改现有job的运行间隔。

如果interval参数值为null,则该job在下一次成功执行后自动从队列中删除。(自动删除该job)

语法:

DBMS_JOB.INTERVAL ( 
   job       IN  BINARY_INTEGER,
   interval  IN  VARCHAR2);

参数说明:

  • job 定时任务的标识符ID。
  • interval job运行的时间间隔。(interval参数必须计算为将来的某个时间。)

示例:

begin
  dbms_job.interval(211,null);
  commit;
end;

NEXT_DATE

next_date存储过程更改现有job下一次运行的时间。

语法:

DBMS_JOB.NEXT_DATE ( 
   job       IN  BINARY_INTEGER,
   next_date IN  DATE);

参数说明:

  • job 定时任务的标识符ID。
  • next_date 下一次执行的时间。

示例:

begin
  dbms_job.next_date(211,sysdate+1);
  commit;
end;

REMOVE

remove存储过程移除现在的job。

需要注意,正在执行的job不会被删除。

语法:

DBMS_JOB.REMOVE ( 
   job       IN  BINARY_INTEGER );

参数说明:

  • job 定时任务的标识符ID。

示例:

begin
  dbms_job.next_date(211,sysdate+1);
  commit;
end;

RUN

run存储过程立即执行现有job。

需要注意,即使BROKEN设置为true,该job也会运行。

语法:

DBMS_JOB.RUN ( 
   job       IN  BINARY_INTEGER,
   force     IN  BOOLEAN DEFAULT FALSE);

参数说明:

  • job 定时任务的标识符ID。
  • force 如果为true,则当前实例不需要和job中指定的实例一致。如果为false,则当前实例必须与job指定的实例一致才能够运行。

示例:

begin
  dbms_job.run(213,false);
  commit;
end;

SUBMIT

submit存储过程创建一个job。

语法:

DBMS_JOB.SUBMIT ( 
   job       OUT BINARY_INTEGER,
   what      IN  VARCHAR2,
   next_date IN  DATE DEFAULT SYSDATE,
   interval  IN  VARCHAR2 DEFAULT 'null',
   no_parse  IN  BOOLEAN DEFAULT FALSE,
   instance  IN  BINARY_INTEGER DEFAULT any_instance,
   force     IN  BOOLEAN DEFAULT FALSE);

参数说明:

  • job 定时任务的标识符ID。
  • what 要运行的PL/SQL存储过程或代码块。
  • next_date job下一次要运行的时间。
  • interval job运行的时间间隔。
  • no_parse 如果设置为false(默认值),则Oracle解析job中的存储过程。如果设置为true,则Oracle在第一次运行时解析job中的存储过程。
  • instance 执行job的实例;默认值为null,表示当前实例(当前参数不做任何改变)。
  • force 实例是否验证。如果为true,则指定的实例必须正在运行,否则,该存储过程会报错;如果为false(默认值),则任何正整数都可以作为job实例。(包括null)

示例:

declare 
WATER_JOB number;
begin
dbms_job.submit(
job=>WATER_JOB,
what=>'test_aa;',
next_date=>sysdate,
interval => 'sysdate+10/86400');
commit;
end;

USER_EXPORT

user_export存储过程导出job的文本。(导出job的语句)

语法:

DBMS_JOB.USER_EXPORT ( 
   job      IN     BINARY_INTEGER,
   mycall   IN OUT VARCHAR2,
   myinst   IN OUT VARCHAR2);

参数说明:

  • job 定时任务的标识符ID。
  • mycall 生成重新创建的job的文本。
  • myinst 生成更改实例的job调用文本。

示例:

declare
jobcall varchar2(3000); 
myinst varchar2(3000); 
begin
  dbms_job.user_export(223,jobcall,myinst);
  dbms_output.put_line(jobcall); 
  dbms_output.put_line(myinst);
  commit;
end;

WHAT

what存储过程更改现有job调用的存储过程。

语法:

DBMS_JOB.WHAT ( 
   job       IN  BINARY_INTEGER,
   what      IN  VARCHAR2);

参数说明:

  • job 定时任务的标识符ID。
  • what 要运行的PL/SQL存储过程。

示例:

begin
dbms_job.what(223,'sdsdf;');
commit;
end;
0

评论区