首页 > 数据库 > > 高级包-DBMS_JOB
高级功能包DBMS_JOB支持的所有接口请参见表1。
接口名称 | 描述 |
|---|---|
提交一个定时任务。作业号由系统自动生成。 | |
提交一个定时任务。作业号由用户指定。 | |
通过作业号来删除定时任务。 | |
禁用或者启用定时任务。 | |
修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。 | |
修改定时任务的任务内容属性。 | |
修改定时任务的下次执行时间属性。 | |
修改定时任务的执行间隔属性。 |
存储过程SUBMIT提交一个系统提供的定时任务。
DBMS_JOB.SUBMIT函数原型为:
DMBS_JOB.SUBMIT(
what IN TEXT,
next_date IN TIMESTAMP DEFAULT sysdate,
job_interval IN TEXT DEFAULT 'null',
job OUT INTEGER);
说明:当创建一个定时任务(DBMS_JOB)时,系统默认将当前数据库和用户名与当前创建的定时任务(DBMS_JOB)绑定起来。该接口函数可以通过call或select调用,如果通过select调用,可以不填写出参。如果在存储过程中则需要用通过perform调用该接口函数。
参数 | 类型 | 入参/出参 | 是否可以为空 | 描述 |
|---|---|---|---|---|
what | text | IN | 否 | 要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。 |
next_date | timestamp | IN | 否 | 下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。 |
interval | text | IN | 是 | 用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。 |
job | integer | OUT | 否 | 作业号。范围为1~32767。当使用select调用dbms.submit时,该参数可以省略。 |
示例:
select DBMS_JOB.SUBMIT('call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1');
select DBMS_JOB.SUBMIT('call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1.0/24');
CALL DBMS_JOB.SUBMIT('INSERT INTO T_JOB VALUES(1); call pro_1(); call pro_2();', add_months(to_date('201701','yyyymm'),1), 'date_trunc(''day'',SYSDATE) + 1 +(8*60+30.0)/(24*60)' ,:jobid);
ISUBMIT与SUBMIT语法功能相同,但其第一个参数是入参,即指定的作业号,SUBMIT最后一个参数是出参,表示系统自动生成的作业号。
示例:
CALL dbms_job.isubmit(101, 'insert_msg_statistic1;', sysdate, 'sysdate+3.0/24');DBMS_JOB.REMOVE
存储过程REMOVE删除指定的定时任务。
DBMS_JOB.REMOVE函数原型为:
REMOVE(job IN INTEGER);
参数 | 类型 | 入参/出参 | 是否可以为空 | 描述 |
|---|---|---|---|---|
job | integer | IN | 否 | 指定的作业号。 |
示例:
CALL dbms_job.remove(101);存储过程BROKEN禁用或者启用定时任务。
DBMS_JOB.BROKEN函数原型为:
DMBS_JOB.BROKEN(
job IN INTEGER,
broken IN BOOLEAN,
next_date IN TIMESTAMP DEFAULT sysdate);
参数 | 类型 | 入参/出参 | 是否可以为空 | 描述 |
|---|---|---|---|---|
job | integer | IN | 否 | 指定的作业号。 |
broken | boolean | IN | 否 | 状态标志位,true代表禁用,false代表启用。具体true或false值更新当前job;如果为空值,则不改变原有job的状态。 |
next_date | timestamp | IN | 是 | 下次运行时间,默认为当前系统时间。如果参数broken状态为true,则更新该参数为'4000-1-1';如果参数broken状态为false,且如果参数next_date不为空值,则更新指定job的next_date值,如果next_date为空值,则不更新next_date值。该参数可以省略,为默认值。 |
示例:
CALL dbms_job.broken(101, true);
CALL dbms_job.broken(101, false, sysdate);
存储过程CHANGE修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。
DBMS_JOB.CHANGE函数原型为:
DMBS_JOB.CHANGE(
job IN INTEGER,
what IN TEXT,
next_date IN TIMESTAMP,
interval IN TEXT);
参数 | 类型 | 入参/出参 | 是否可以为空 | 描述 |
|---|---|---|---|---|
job | integer | IN | 否 | 指定的作业号。 |
what | text | IN | 是 | 执行的存储过程名或者sql语句块。如果该参数为空值,则不更新指定job的what值,否则更新指定job的what值。 |
next_date | timestamp | IN | 是 | 下次运行时间。如果该参数为空值,则不更新指定job的next_date值,否则更新指定job的next_date值。 |
interval | text | IN | 是 | 用来计算下次作业运行时间的时间表达式。如果该参数为空值,则不更新指定job的interval值;如果该参数不为空值,会校验interval是否为有效的时间类型或interval类型,则更新指定job的interval值。如果为字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。 |
示例:
CALL dbms_job.change(101, 'call userproc();', sysdate, 'sysdate + 1.0/1440');
CALL dbms_job.change(101, 'insert into tbl_a values(sysdate);', sysdate, 'sysdate + 1.0/1440');
存储过程WHAT修改定时任务的任务内容属性。
DBMS_JOB.WHAT函数原型为:
DMBS_JOB.WHAT(
job IN INTEGER,
what IN TEXT);
参数 | 类型 | 入参/出参 | 是否可以为空 | 描述 |
|---|---|---|---|---|
job | integer | IN | 否 | 指定的作业号。 |
what | text | IN | 否 | 执行的存储过程调用或者sql语句块。 |
说明:示例:
CALL dbms_job.what(101, 'call userproc();');
CALL dbms_job.what(101, 'insert into tbl_a values(sysdate);');
存储过程NEXT_DATE修改定时任务的下次执行时间属性。
DBMS_JOB.NEXT_DATE函数原型为:
DMBS_JOB.NEXT_DATE(
job IN INTEGER,
next_date IN TIMESTAMP);
参数 | 类型 | 入参/出参 | 是否可以为空 | 描述 |
|---|---|---|---|---|
job | integer | IN | 否 | 指定的作业号。 |
next_date | timestamp | IN | 否 | 下次运行时间。 |
说明:如果输入的next_date的值小于当前日期值,该job会立即执行一次。
示例:
CALL dbms_job.next_date(101, sysdate);DBMS_JOB.INTERVAL
存储过程INTERVAL修改定时任务的执行间隔属性。
DBMS_JOB.INTERVAL函数原型为:
DMBS_JOB.INTERVAL(
job IN INTEGER,
interval IN TEXT);
参数 | 类型 | 入参/出参 | 是否可以为空 | 描述 |
|---|---|---|---|---|
job | integer | IN | 否 | 指定的作业号。 |
interval | text | IN | 是 | 用来计算下次作业运行时间的时间表达式。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。interval是否为有效的时间类型或interval类型。 |
示例:
CALL dbms_job.interval(101, 'sysdate + 1.0/1440');说明:
对于指定job正在运行状态(即job_status为'r')时,不允许通过remove、change、next_date、what、interval等接口删除或修改job的参数信息。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3164954/ ,如需转载,请注明出处,否则将追究法律责任。