oracle定时器在项目中的应用
业务需求:
现在业务人员提出了一个需求:
在项目中的工作流,都要有一个流程编号,此编号有一定的规则:
前四五位是流程的字母缩写,中间是8位的日期,后面五位是流水码,要求流水码每天从00001开始。即:QJLC2018060800001
没有想到更好的方式,暂时考虑到了使用oracle的定时器来每天定时的将流水码重置为1。
Oracle数据库表和定时器的创建:
创建任务编码表:
|
/*==============================================================*/ /* Table: t_flow_taskcode_conf */ /*==============================================================*/ create table t_flow_taskcode_conf ( flowflag varchar2(8), flowab varchar2(10), flowcode NUMBER(5) ); comment on table t_flow_taskcode_conf is '流程生成任务编号表'; comment on column t_flow_taskcode_conf.flowflag is '流程标识'; comment on column t_flow_taskcode_conf.flowab is '流程四位缩写'; comment on column t_flow_taskcode_conf.flowcode is '流水码'; insert into t_flow_taskcode_conf (FLOWFLAG, FLOWAB, FLOWCODE) values ('QJLC', 'QJLC', 1); insert into t_flow_taskcode_conf (FLOWFLAG, FLOWAB, FLOWCODE) values ('BGYP', 'BGYP', 1); insert into t_flow_taskcode_conf (FLOWFLAG, FLOWAB, FLOWCODE) values ('DJBX', 'DJBX', 1); commit; |
创建oracle内部的定时器:
|
create or replace procedure taskcode_procedure is begin update t_flow_taskcode_conf fc set fc.flowcode = 1; commit; end; --定义taskcode每天自动初始化的job任务 declare taskcodejob number; begin dbms_job.submit( taskcodejob, --定时器ID,系统自动获得 'taskcode_procedure;', --what 执行的存储过程名 sysdate, --定时器开始执行的时间,这样写表示立即执行 --next_date,可以不填 'TRUNC(sysdate)+1'--'Interval时间字符串' --关键设置,此处表示每天的0点执行 ); commit; end; #########下面是一些oracle中的job表和内置定时器函数的介绍: -- select * from user_jobs; --查看调度任务 -- select * from dba_jobs_running;--查看正在执行的调度任务 -- select * from dba_jobs;--查看执行完的调度任务 ----更新一个job的sql代码 declare taskcodejob number; begin dbms_job.run(3); --运行jobid为3的定时器 --dbms_job.remove(10); --9是从user_jobs这个表中查询到然后手动赋值到这里的 --dbms_job.broken(8); --停止一个job --dbms_job.interval(84,'TRUNC(sysdate)+15/1440');--更改定时器的运行频率 commit; end; |
项目中的使用
Java代码:
/** |
Mybatis的xml文件:
|
<select id="getTaskCodeByFlow" parameterType="string" resultType="string"> select fc.flowab||to_char(sysdate,'yyyyMMdd')||lpad(fc.flowcode,5,'0') taskcode from t_flow_taskcode_conf fc where fc.flowflag = #{flowflag} </select> <update id="updateFlowCode" parameterType="map"> update t_flow_taskcode_conf set flowcode = flowcode+1 where flowflag=#{flowflag} </update> |
上面的java代码,要保证getAndSetTaskCode()方法在使用时开启了事务。
参考:
https://www.cnblogs.com/mingforyou/archive/2012/06/06/2538063.html
https://blog.csdn.net/anrry258/article/details/26555693
注意区分是普通的sql窗口还是commond窗口。
oracle定时器在项目中的应用的更多相关文章
- maven新建Spring MVC + MyBatis + Oracle的Web项目中pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- spring项目中如何添加定时器以及在定时器中自动生成sprng注入对象
最近做了一个java的项目,部门领导给了一套代码让我尽快掌握,说心里话本人真心不喜欢java的这种项目方式,各种配置各种xml文件简直头都大了,下面就将我遇到的其中一个我认为是坑的地方整理出来,希望能 ...
- 项目中oracle存储过程记录——经常使用语法备忘
项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...
- JavaWeb项目中获取对Oracle操作时抛出的异常错误码
最近在项目中碰到了这么一个需求,一个JavaWeb项目,数据库用的是Oracle.业务上有一个对一张表的操作功能,当时设置了两个字段联合的唯一约束.由于前断没有对重复字段的校验,需要在插入时如果碰到唯 ...
- java web 项目中 简单定时器实现 Timer
java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报 分类: JAVA(24) 版权声明:本文为博 ...
- vue 项目中,定时器(setInterval)的写法
vue 项目中,定时器(setInterval)的写法: fetchJobList是一个方法,里面有dispatch一个action进行请求接口的代码. data () { return { inte ...
- oracle性能优化(项目中的一个sql优化的简单记录)
在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性.其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了.本文主要记录在实际项目中,一个 ...
- Oracle 项目中 SQL 脚本更新方式
DECLARE hasVersion ); dbVersion ); BEGIN ) INTO hasVersion FROM ELB_SETTINGS E WHERE E.KEY='dbVersio ...
- 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持
在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...
随机推荐
- 【javascript】javasrcipt设计模式之状态模式
使用场景 解决多个[ifelse]嵌套,将其封装成若干个方法 区分事物内部的状态,事物内部的状态的改变往往会带来事物的行为的改变 简单的多个状态直接切换的时候 //两个状态之间的切换,使用if-els ...
- Web前端和后端开发的区别和要求
Web前端和后端开发的区别和要求 有时候自己会分不清,其实是因为前后端都了解,类似于全栈工程师,但又什么都不是很精通.那到底什么是前端.后端呢,我整理了一些企业要求级别的前端/后端基础,开发框架等. ...
- RN 解决CFBundleIdentifier", Does Not Exist
mac环境下,在命令行中run-ios构建时报错:CFBundleIdentifier", Does Not Exist 打开XCode,进入.xcodeproj文件,运行,编译时报错:'b ...
- 排查在 Azure 中创建、重启 Windows VM 或调整其大小时发生的分配失败
创建 VM.重新启动已停止(解除分配)的 VM 和重设 VM 大小时,Azure 会为订阅分配计算资源. 执行这些操作时,即使尚未达到 Azure 订阅限制,也可能偶尔收到错误. 本文说明一些常见分配 ...
- Ionic开发项目
hybrid app是移动开发代替原生开发完成app应用项目的一种方案,Ionic是hybrid app开发的一种选择.对ionic有兴趣可以去网上找相应的基础知识来学习了解,因为Ionic是基于An ...
- Python学习---网络编程 1217【all】
OSI七层模型: 物理层, 数据链路层, 网络层,传输层,会话层,表达层,应用层 应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 传输层:TCP,UDP 网络层:I ...
- Python实例---三级菜单的实现[high]
# version: python3.2.5 # author: 'FTL1012' # time: 2017/12/7 09:16 menu = { '陕西': { '西安': { '未名区': [ ...
- Oracle手工修改JOB属性
以下由sqlplus 来执行,具体参照一下相关的文档VARIABLE jobno number;BEGINDBMS_JOB.SUBMIT(:jobno,’p_test;’SYSDATE,’SYSDAT ...
- Android Proguard使用技巧
1.混淆后解码 ProGuard运行结束后,输出以下文件: dump.txt :描述.apk文件中所有类文件间的内部结构 mapping.txt:列出了原始的类,方法和字段名与混淆后代码间的映射.这个 ...
- 转贴:如何学好C++语言.docx
不知道哪里转的.呵呵 抱歉 C++是最难的语言.这个世界上最难的编程语言可能非C++莫属了.你千万不要以为几天就可以学好C++,C++的学习曲线是相当BT的,你可以看看这篇文章.C++是一门很自由的语 ...