业务需求:

现在业务人员提出了一个需求:

在项目中的工作流,都要有一个流程编号,此编号有一定的规则:

前四五位是流程的字母缩写,中间是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代码:

/**
 *
传入流程的标志,返回流程的任务编码
 * @param
taskCodeEnum
 
* @return
 
*/
public String getAndSetTaskCode(FlowTaskCodeEnum taskCodeEnum){
   String flowflag = taskCodeEnum.toString();  //flowflag是”BGYP”,”QJLC”等字符串
   //先获取流程的编码
  
String taskcode = publicCollectDao.getTaskCodeByFlow(flowflag);
   Map<String,Object> map = new HashMap<>();
   map.put("flowflag",flowflag);
   //设置流程的编码加1
  
publicCollectDao.updateFlowCode(map);
   return taskcode;
}

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定时器在项目中的应用的更多相关文章

  1. 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 ...

  2. spring项目中如何添加定时器以及在定时器中自动生成sprng注入对象

    最近做了一个java的项目,部门领导给了一套代码让我尽快掌握,说心里话本人真心不喜欢java的这种项目方式,各种配置各种xml文件简直头都大了,下面就将我遇到的其中一个我认为是坑的地方整理出来,希望能 ...

  3. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  4. JavaWeb项目中获取对Oracle操作时抛出的异常错误码

    最近在项目中碰到了这么一个需求,一个JavaWeb项目,数据库用的是Oracle.业务上有一个对一张表的操作功能,当时设置了两个字段联合的唯一约束.由于前断没有对重复字段的校验,需要在插入时如果碰到唯 ...

  5. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  6. vue 项目中,定时器(setInterval)的写法

    vue 项目中,定时器(setInterval)的写法: fetchJobList是一个方法,里面有dispatch一个action进行请求接口的代码. data () { return { inte ...

  7. oracle性能优化(项目中的一个sql优化的简单记录)

    在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性.其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了.本文主要记录在实际项目中,一个 ...

  8. Oracle 项目中 SQL 脚本更新方式

    DECLARE hasVersion ); dbVersion ); BEGIN ) INTO hasVersion FROM ELB_SETTINGS E WHERE E.KEY='dbVersio ...

  9. 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

    在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...

随机推荐

  1. 本地调试 谷歌浏览器报错:跨域问题处理 Access-Control-Allow-Origin

    前端在本地,调试,就经常的就是会遇到 调用接口,提示跨域了. 如你要访问 http://****/api/user chrome 浏览器 报错: XMLHttpRequest cannot load ...

  2. 关于 Blog 修改

    关于 Blog 修改 本 Blog 使用的是 WordPress,每次升级 WordPress 都需要修改文件,以修正一些问题,因此做个总记录,便于自己修改. 解决 WordPress 无法打开中文链 ...

  3. android端的ormlite框架

    安卓端有很多优秀的数据库框架来操作sqlite,如ormlite框架,这个框架可以用来实现表到对象的解析和转化. 使用: 首先去官网下载两个jar包,core和android(如果在安卓端开发的话), ...

  4. xshell5 可用注册码

    101210-450789-147200(可以激活Xshell5,而且可以升级) 亲测可用 只能用于xshell5

  5. .net core系列之《.net平台历程介绍以及.net framework和.net core对比》

    一..Net平台的背景 1.2010之前 的PC时代的时候,互联网规模还不是特别庞大,以静态编译式语言为代表的JAVA和.Net没什么太大区别,.net以windows自居. 2.2010年以JAVA ...

  6. 加装固态硬盘SSD

    参考:http://tieba.baidu.com/p/4224078869 1.首先拆开后盖,取出机械硬盘,把固定框换到固态盘上,把机械盘安装到硬盘托架上. 装上固态硬盘,然后把光驱位的塑料壳子拆下 ...

  7. 乘风破浪:LeetCode真题_017_Letter Combinations of a Phone Number

    乘风破浪:LeetCode真题_017_Letter Combinations of a Phone Number 一.前言 如何让两个或者多个集合中的随机挑选的元素结合到一起,并且得到所有的可能呢? ...

  8. JMeter中文版用户手册

    1.1 简介 使用JMeter通常会有以下步骤: 1.1.1 创建测试计划 首先,运行JMeter图形化界面. 然后在文件菜单中选择Templates…->Recording,通过浏览器录制We ...

  9. oracle中RAW数据类型

    近日在研究v$latch视图时,发现一个从未见过的数据类型.v$latch 中ADDR属性的数据类型为RAW(4|8)  同时也发现v$process中的ADDR属性的数据类型也为RAW(4|8).于 ...

  10. UML实践

    UML图一览 1.分工泳道图 使工作内容更加清晰 2.类图 更加细化了一些函数,对于之后的接口文档细节问题进行了约束 3.用例图 实现了一个玩家的整体可操作的概况 4.活动图 1)注册活动图 用于登录 ...