目录

引言

需求

示例

第一步:创建存储过程

第二步:创建定时任务job

第三步:启动定时任务job

测试:数据测试


引言

开发中定制定时执行的任务有两种方式,代码级别和数据库级别,代码级别的不多阐述,本文主要介绍如何使用Oracle数据库的job来定制一个简单的定时执行任务的步骤。

需求

每间隔1秒钟删除表 batchs_lock 中锁定时间(字段为lock_time)大于等于一分钟的所有记录(也就是字段 lock_time 的时间值与系统当前时间相差1分钟的所有记录),表结构如下:

--------------批次表
create table ecm_batchs_lock
(application_no       varchar2(20) not null,org_code             varchar2(10) not null,lock_time            timestamp(6) not null
);-- create/recreate primary, unique and foreign key constraints
alter table ecm_batchs_lockadd constraint application_no primary key (application_no)using index;

示例

废话不多说,直接上例子:

第一步:创建存储过程

create or replace procedure ecm_batchs_lock_proce is
begindelete from ecm_batchs_lock e where e.lock_time<=sysdate-1/1440;commit;
end;

脚本讲解:

create or replace procedure 存储过程名可随意取 is
begin此处编写要执行的脚本逻辑并以分号结尾不能忘;commit;
end;
--------------------------------------------------------------
PS:
e.lock_time<=sysdate-1/1440;   表示1分钟前, 其中1440=60*24
e.lock_time<=sysdate-30/1440;  则表示30分钟前
类推:
e.lock_time<=sysdate-30/86400;  表示30秒前,其中86400=60*60*24
...

在如下图可查看到刚刚创建的存储过程:

第二步:创建定时任务job

declare jobno number;
begindbms_job.submit(jobno,'ecm_batchs_lock_proce;',sysdate,'sysdate+1/86400');commit;
end;

脚本讲解:

declare 标志位随便写英文即可 number;
begindbms_job.submit(同第一行的标志位,'存储过程名字切记分号不能忘;',sysdate,'sysdate+1/86400');commit;
end;
--------------------------------------------------------------
PS:
sysdate+1/86400   表示每隔1秒钟执行一次,86400=60*60*24
类推:
sysdate+1/1440    表示每隔1分钟执行一次,1440=60*24

然后,执行如下查询语句,在如下图可查看到创建好的job详细信息:

select * from dba_jobs;

第三步:启动定时任务job

(1)先查询存储过程 ecm_batchs_lock_proce 的 job 值是多少,其实上图中已经可以看到是74了:

select j.job as job from dba_jobs j where j.WHAT='ecm_batchs_lock_proce;'

脚本讲解:

select j.job as job from dba_jobs j where j.WHAT='存储过程名字;'

(2)将查询到的值代入如下脚本:

begindbms_job.run(74);commit;
end;

脚本讲解:

dbms_job.run(查到的值);   可以理解为以id启动job。

启动完job后,在如下图可以看到:

选中后右键,即可进行查看、编辑、删除、启动等操作,如下图:

测试:数据测试

插入一条记录,等待一分钟后发现记录被删除,说明定时任务工作正常:

insert into ecm_batchs_lock(application_no, org_code, lock_time)values('Br-A794596690', 'CA', sysdate);

一分钟后:

案例:

定时查询数据集再插入某张表:


----1------创建存储过程loan_after_check_procedure   创建后在Procedures中查看
create or replace procedure loan_after_check_procedure is
BEGIN---2---查询出数据集合csdeclare cursor cs is select max(t.task_end_datim),cfsv.NATIONAL_ORGANIZATION_CODE,cfsv.CL_APPLICATION_NUMBER,l.loan_idfrom contract_ocr c ,contract_bp bb ,bp_main_ocr mm,cl_fleet_summary_view cfsv,loan l,task twhere c.contract_id=bb.contract_id and bb.business_partner_id = mm.business_partner_idand c.proposal_nbr = cfsv.APPLICATION_NUMBERand cfsv.CL_APPLICATION_NUMBER = l.application_noand l.loan_id = t.loan_idand t.pri_type='1' and t.flag='8' and t.task_status='5'and t.task_end_datim is not null--每月1号00:00:00执行 如2022-05-01 00:00:00 执行,查询出2021-06-01 00:00:00 到 2022-07-01 00:00:00之间的所有符合的单子and t.task_end_datim between (select add_months(sysdate, -11) from dual) and (select add_months(sysdate, -10) from dual)and bb.role_cde='00003' and mm.legal_status_cde='00002' and c.live_sts='L'group by cfsv.NATIONAL_ORGANIZATION_CODE,cfsv.CL_APPLICATION_NUMBER,l.loan_id;
BEGIN  ---3--遍历数据集合cs将制定字段插入指定表for cc in cs loop  BEGININSERT INTO TASK(TASK_ID,LOAN_ID,PRI_TYPE,POSITION_ID,FLAG) ---select (select to_char(sysdate,'yyyymmddhhmmss') FROM DUAL)||(SELECT TRUNC(1000+9000*dbms_random.value) FROM dual) as str from dual  年月日时分秒+4位随机数拼接作为taskid,和代码逻辑一致 VALUES((select (select to_char(sysdate,'yyyymmddhhmmss') FROM DUAL)||(SELECT TRUNC(1000+9000*dbms_random.value) FROM dual) as str from dual),cc.loan_id,'30','79','1');   COMMIT;END;
END loop;
END;
END;----4----创建定时job(每月1日凌晨0点执行)   创建后在DBMS_Jobs中查看
---TRUNC(sysdate,''mi'')+1/(24*60)      每分钟执行一次
---TTRUNC(LAST_DAY(SYSDATE)+1)          每月1日凌晨0点执行
---TRUNC(LAST_DAY(SYSDATE))+1+1/24      每月1日凌晨1点执行
declare jobno number;
begindbms_job.submit(jobno,'loan_after_check_procedure;',sysdate,'TTRUNC(LAST_DAY(SYSDATE)+1)');commit;
end;

=================以上三步完成后,整个定时任务就创建并启动完成了,测试运行OK,是不是很简单,接下来就是按照自己实际需求作对应的修整了,快去试试=================

Oracle定时任务DBMS_JOB相关推荐

  1. oracle定时任务(dbms_job)

    author:skate time:2007-09-12 http://publish.it168.com/2006/0311/20060311017002.shtml 今天总结下Oracle的任务队 ...

  2. oracle数据库定时任务时间设置,oracle定时任务(dbms_job)的时间设置参考

    最后那一项可以参考如下: 每天午夜12点 'TRUNC(SYSDATE + 1)' 每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' 每星期二中午1 ...

  3. oracle sys.dbms job,Oracle定时任务之Job和Dbms_job

    感谢老哥,解决了我的疑惑 https://www.cnblogs.com/yscit/p/10376005.html https://www.cnblogs.com/ybhcolin/archive/ ...

  4. oracle定时任务失效

    发现系统数据没有更新,查看oracle定时任务,估计没有执行. 发现next_date变成了4000/1/1 ,broken被选中. select * from user_jobs发现该任务失败次数达 ...

  5. oracle 定时任务 job 调用存储过程有回到输出参数(含out参数)

    oracle 定时任务 job 调用存储过程有返回输出参数(含out参数) 因前台调用一个含有OUT参数的存储过程,同时在JOB里也想调用同一个存储过程,不想将OUT参数去掉重新建一个存储过程再被JO ...

  6. oracle 定时任务例子【项目例子】

    说明:请在plsql工具的命令窗口中,依次按步骤执行如下脚本    (1)建立备份表 my_test_log2 create table my_test_log2 as select * from m ...

  7. Oracle 定时任务job使用详解

    Oracle 定时任务job使用详解 1.定时任务job job在指定的时间点或每天的某个时间点自行执行任务. 关键性能视图 SQL> desc user_jobs; Name Type Nul ...

  8. oracle 定时任务删除数据

    这几天在工作中遇到一个问题就是:要删除表在备份表中已存在的数据(2000多万数据),这个数据是SQL查出来的,例如: select count(1) from JY_SALE_FULLORDER_DT ...

  9. oracle工作每月1号,利用oracle定时任务生成每月从1开始的流水号

    --创建序列 --入库 create sequence rk_seq; --出库 create sequence ck_seq; --移库 create sequence yk_seq; --创建存储 ...

  10. 新建oracle数据库定时任务,创建 Oracle 定时任务

    功能说明: 要求实现数据库中的表数据每天午夜时分定时自动执行数据迁移动作. 1. 创建历史数据存储表(USER_TAB_BAK), 要求与源表(USER_TAB)结构一致; for example: ...

最新文章

  1. studio2008 无法显示该网页
  2. 设计模式之工厂模式和抽象工厂
  3. Winbond W25QXX SPI Flash使用笔记
  4. Leetcode987 二叉树的垂序遍历
  5. 腾讯多任务模型MFH
  6. linux创建文件内容三行,shell之创建文件及内容的方法示例
  7. html在线摄像头,在HTML里加载摄像头的方法
  8. c语言延时函数_SystemVerilog函数和任务
  9. 在Windows端安装kafka提示错误:找不到或无法加载主类的解决方案
  10. 深度学习中的梯度下降算法
  11. [推荐]HLSL编程实现PhotoShop滤镜效果
  12. ComBox、listBox、checklistBox控件
  13. iOS UIImageView设置为圆形
  14. 利用SQL语句创建数据库
  15. android卡片 弹簧滑动,一种通用式弹簧卡扣的制作方法
  16. 跳妹儿学编程之ScratchJr(三):什么是儿童编程语言?初识ScratchJr和Scratch
  17. vba python 基金历史排名_历史数据揭秘:跟着业绩排名买基金靠谱吗?
  18. 华为al00的计算机在哪,(详细)华为畅享8 LDN-AL00的USB调试模式在哪里开启的流程...
  19. 用于2D动画的实时嘴型同步技术
  20. 服务器网页连不上网络怎么回事啊,网络连接正常网页打不开怎么办? dns服务器问题解决[多图]...

热门文章

  1. lenovo服务器换系统重装系统_电脑怎么重装系统lenovo
  2. Fluent:如何用Custom Field Function Calculater替代UDMI提高收敛性
  3. virtualbox 搭建opnsense 防火墙
  4. 寄存器的偏移地址是什么意思?还有基地址,偏移地址就是相对于及地址的offset
  5. MATLAB 中跳出if条件判断
  6. JAVA实现浪漫流星表白(520到了,快来看看程序员是怎么表白的吧)
  7. 让 Code Review成为一种习惯
  8. Python入门教程(从小白到高级)(新版)
  9. python saveas_Python中正确的Save-As函数
  10. win32com在wps上另存为SaveAs报错