怎样创建Oracle的dbms_jobs(数据库任务)

一、业务需求

    在开发项目的过程中,我们需要对某个存储过程(或SQL语句)执行定时任务(比如指定每天的每个时间内执行),这时我们就需要使用到数据库任务(DBMS_JOBS)来实现。

二、实现方法

2.1、查询当前运行的数据库任务语句

--查看当前用户下的数据库执行任务语句
SELECT * FROM  dba_jobs ;

2.2、使用PL/SQL创建dbms_jobs

    选择DBMS_Jobs点击鼠标右键选则【新建】,在What值输入需执行的存储过程名称及其对应参数,在输入时间间隔,最后点击应用即可。

2.3、通过SQL语句创建DBMS_Jobs

--通过SQL创建DBMS_Jobs(模板)
declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  /*自动生成JOB_ID*/  
        WHAT =>'storedProcedureName(Param);',  /*需执行的存储过程名称或SQL语句*/  
        NEXT_DATE => sysdate,  /*初次执行时间(立即执行)*/  
        INTERVAL => 'TRUNC(sysdate+1) + (8.5*60)/ (24 * 60)' /*执行间隔(每隔一天的早上8点半执行)*/
      );  
  commit;
end;


--示例程序(每天早上8:30执行【TESTINUPTOUTPUT】存储过程且指定固定参数为1000)
declare
  job number;
begin
  sys.dbms_job.submit(
	   job => job,
     what => 'declare inputInfo varchar2(50):=''1000'';

begin

TESTINUPTOUTPUT(inputInfo);

end;',
   interval =>  'TRUNC(sysdate+1) + (8.5*60)/ (24 * 60)');
  commit;
end;

2.4、运行DBMS_Jobs的SQL语句

--运行DBMS_JOBS的SQL语句

BEGIN

dbms_job.run(任务编号);

END;

运行dbms_Job示例如下:

2.5、 停止DBMS_Jobs的SQL语句

--手动停止某个DBMS_Job

/*
    格式:dbms_job.broken(jobId,broken,next_date); 
    jobId:定时任务的编号(DBMS_Job)
    broken:值为true时,表示禁用job;值为false时,表示启用job。
    next_date:(某一时刻停止),也可是sysdate(立刻停止)(默认值为sysdate)。
*/
BEGIN
    dbms_job.broken (jobId, TRUE, next_date) ; 
COMMIT ;
END ;

 运行停止DMBS_Job任务示例如下:

 2.6、修改定时任务(DBMS_Jobs)的SQL语句

2.6.1、修改定时任务的执行间隔

--修改定时任务的时间间隔

/*
    jobId:任务的编号
    interval: 任务执行间隔的时间表达式
*/

begin
  dbms_job.interval(jobId,interval);  
  commit;
end;

 运行示例如下:

2.6.2、修改定时任务的下次执行时间

--修改定时任务的下一次执行时间

/*
    jobId:任务的编号
    next_date: 下一次任务执行的时间表达式
*/
begin
   dbms_job.next_date(jobId,next_date); 
   commit;
end;

 运行示例:

2.6.3、修改定时任务要执行的操作(或存储过程)

--修改定时任务要执行的操作

/*
    jobId:任务的编号
    newStoredProcedure: 修改为的新存储过程
*/
begin
    dbms_job.what(jobId,'newProcedures;');   
  commit;
end;

 运行示例如下:

2.7、删除定时任务的SQL语句

--删除定时任务的SQL语句
/*
     Jobid:表示需删除的任务编号
*/

begin
  dbms_job.remove(Jobid);  
  commit;
end;

运行示例如下: 

 三、定时任务的时间间隔说明

定时任务的时间间隔说明
序号 说明 时间间隔表达式
1 时间间隔为1分钟 trunc(sysdate,'mi') + 1/ (24*60) 或 sysdate + 1 / (24 * 60) 
2 时间间隔为1小时  sysdate + 1/24 from 
3 时间间隔为每天凌晨1点  trunc(sysdate+ 1)  +1/ (24) 
4 时间间隔为每周一凌晨1点 trunc(next_day(sysdate,'星期一'))+1/24 
 
5 时间间隔为每月1日凌晨1点 trunc(LAST_DAY(SYSDATE))+1+1/24
6 时间间隔为每季度的第一天凌晨1点 trunc(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
7 时间间隔为每半年定时执行【10月1日和1月1日凌晨1点】  ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
8 时间间隔为每年定时执行【每年1月1日凌晨1点】

ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340