`
yufenfei
  • 浏览: 801124 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DB2 唯一流水号生成

    博客分类:
  • DB2
 
阅读更多

最近开发的系统要求生成很多唯一的单证号,单证号的规则  前缀_yyyyMMdd+顺序号,如 P_201210160001, P_201210160002。

 

因为生成多种的单证号。于是在系统中建了一个单证号种子表BAS_SEQ_SEED

 

 

ID (PK)

主键ID

BIGINT

NET_ID

网络ID

BIGINT

COMP_ID

加盟公司ID

BIGINT

SEED_TYPE

种子类型

SMALLINT

SEED_DATE

日期

VARCHAR(16)

SEED_VALUE

种子值

SMALLINT

SEED_PREFIX

种子前缀

VARCHAR(6)

SEED_SPLIT

种子分隔符

VARCHAR(2)

CREATE_TIME

 

VARCHAR(19)

 

其中NET_ID、COMP_ID、SEED_TYPE建立一个唯一索引

 

生成的单证号有存储过程来实现

 

CREATE PROCEDURE PROC_SEQ_SEED_GET
( IN net_id_in bigint,   --网络ID
  IN comp_id_in bigint,  --公司ID
  IN seed_type_in integer,--序列号类型
  IN seed_date_in VARCHAR(16),--当前日期yyyymmdd格式
  OUT return_value VARCHAR(32) --返回值
) 
P1: BEGIN  
  DECLARE seed_value_t integer;
  DECLARE seed_date_t varchar(16);
  DECLARE return_value_t integer DEFAULT 1; 
  
  DECLARE rs1 CURSOR WITH RETURN FOR
  select SEED_VALUE,SEED_DATE FROM BAS_SEQ_SEED as t where t.NET_ID=net_id_in and t.COMP_ID=comp_id_in and t.SEED_TYPE=seed_type_in for update WITH RR USE AND KEEP UPDATE LOCKS;
  OPEN rs1;
  FETCH  rs1 into seed_value_t ,seed_date_t;
 
  IF (seed_value_t is null) then --记录不存在
    begin
	           insert INTO BAS_SEQ_SEED(ID,NET_ID,COMP_ID,SEED_TYPE,SEED_DATE,SEED_VALUE)
		    VALUES
		   (NEXTVAL FOR SE_EXPRESSBAS,net_id_in,comp_id_in,seed_type_in,seed_date_in,1);
		   SET return_value_t = 1;   
    end; 
 else
	begin 
	   --set seed_date_in=  SCM_WULIU.ts_fmt(current timestamp,'yyyymmdd');
       if(seed_date_in=seed_date_t) then  --当天
	   begin
	      update BAS_SEQ_SEED set SEED_VALUE=SEED_VALUE+1 where NET_ID=net_id_in and COMP_ID=comp_id_in and SEED_TYPE=seed_type_in;
	      SET return_value_t = seed_value_t+1;
	   end;
	 else     --非当天
	    begin
	       update BAS_SEQ_SEED set SEED_DATE=seed_date_in,SEED_VALUE=1 where NET_ID=net_id_in and COMP_ID=comp_id_in and SEED_TYPE=seed_type_in;
	       SET return_value_t = 1;
	     end;
	   end if;
	 end; 
  end if;
     if(return_value_t<10) then
       set returnvalue=seed_date_in ||'000'||char(return_value_t);
     elseif(return_value_t>=10 AND return_value_t<100) then
        set returnvalue=seed_date_in ||'00'||char(return_value_t); 
     elseif(return_value_t>=100 AND return_value_t<1000) then
        set returnvalue=seed_date_in ||'0'||char(return_value_t);  
     else    
        set returnvalue=seed_date_in||char(return_value_t); 
     end if; 
    
  close rs1;
END P1
 

 

 

大数据量并发测试生成流程号唯一。

 

java调用存储过程

 

 

		try {
			Session session = this.getHibernateSession();
			String sql ="{call SCM_WULIU.PROC_SEQ_SEED_GET(?,?,?,?,?)}";
			CallableStatement cs = session.connection().prepareCall(sql);// 存储过程调用       
			cs.setLong(1, net_id);
			cs.setLong(2, comp_id);
			cs.setShort(3, seed_type);
			cs.setString(4,PubMethod.getCurSysDate("yyyyMMdd"));
			cs.registerOutParameter(5, Types.CHAR);
			cs.execute();
		    result = cs.getString(5);   //得到输出参数 
			session.flush();
		} catch (Exception he) {
			throw he;
		} finally {
			closeSession();
		}
 

 

 

 

分享到:
评论

相关推荐

    存储过程实现生成流水号

    存储过程实现流水号,可以实现防止并发生成重复的流水号,.net 技术,sql server 数据库编写,可以参考学习哦

    sql server 2000 分页存储过程,DB2分页存储过程,db2自动生成流水号存储过程

    下面将详细介绍SQL Server 2000和DB2中分页存储过程的实现,以及DB2如何自动生成流水号。 首先,让我们看看SQL Server 2000的分页存储过程。在SQL Server 2000中,由于没有内置的OFFSET和FETCH NEXT功能,我们通常...

    db2自动生成数据库的语句

    ### DB2自动生成数据库的语句 #### 一、引言 在数据库管理与开发过程中,经常需要创建或重建数据库来满足不同的需求场景。对于IBM的DB2数据库管理系统而言,如何利用DB2命令行工具自动生成数据库是一个重要的技能点...

    db2class C# 代码生成器

    DB2Class(码到成功)代码生成器是一款为C#数据库程序员设计的在线自动代码生成器,其生成的代码基于面向对象的思想和MVC架构设计。主要实现在项目中数据库表的基类代码的自动生成,包括生成属性、添加、修改、删除...

    使用db2top和db2advis生成索引建议

    ### 使用db2top和db2advis生成索引建议 #### db2top工具介绍与配置 `db2top`是IBM DB2数据库管理系统的性能监控工具之一,它可以帮助数据库管理员实时监控DB2数据库实例的运行状况,从而及时发现并解决性能问题。...

    Mybatis连接DB2数据库生成逆向工程

    本教程将详细讲解如何使用Mybatis连接DB2数据库并进行逆向工程,生成Java实体类、Mapper接口和XML映射文件。 首先,我们了解逆向工程(Reverse Engineering)的概念。在数据库开发中,逆向工程是指从现有的数据库...

    db2用sql助手生成sql

    在IBM DB2数据库管理系统中,SQL助手(SQL Assist)是一个非常强大的工具,它能帮助用户生成、修改和执行SQL查询语句。对于那些对SQL语法不是很熟悉或是希望提高查询效率的用户来说,SQL助手无疑是一个福音。下面...

    MSSQL,Oracle,DB2数据库数据脚本生成工具

    其主要功能是根据某个类型如:MSSQL的数据库,生成目标数据库:MSSQL,Oracle,Db2的数据脚本。这是一个命令行工具,具体说明可以参见源码中的注释,或使用dbuilder /help 查看使用帮助信息。本程序完全开源,您可以...

    DB2唯一免费版入门

    "DB2唯一免费版入门"指的是DB2Express-C版本,它是IBM为个人和小型企业提供的一个免费、功能丰富的数据库解决方案。本篇文章将深入探讨DB2Express-C的安装、配置、基本操作以及常见问题解决,帮助初学者快速入门。 ...

    DB2ASP自动ASP生成器

    DB2ASP是一个可以自动将ACCESS数据库文件转化为对应的ASP代码的软件。 本软件能够让你可视化操作数据库,轻松设置SQL语句,生成常见ASP信息列表,信息递交入数据库,以及查询表单。无须重复编写大量的数据库操作...

    DB2数据库创建脚本自动生成脚本 bash shell和Python开发

    静默模式,很高效的一种批量创建多套db2数据库的解决方案,只需要简单将多套数据库创建要求在配置文件中配置好,运行自动生成脚本,即可快速根据要求生成所有数据库的创建脚本,方便,高效,实用。

    linux下DB2常用命令

    Linux 下 DB2 常用命令 DB2 是一个 relation database management system(关系数据库管理系统),广泛应用于企业级的数据存储和管理中。在 Linux 环境下,DB2 提供了丰富的命令行工具,用于管理和维护数据库。下面...

    db2数据库安装包、db2数据库安装驱动

    DB2是IBM公司开发的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。本压缩包包含DB2数据库的安装包以及链接服务器驱动,对于理解DB2数据库的安装过程和使用至关重要。 首先,我们来详细了解DB2数据库...

    DB2DB2DB2DB2DB2DB2DB2

    DB2DB2DB2DB2DB2DB2DB2DB2DB2

    DB2 11.5版本 jdbc db2jcc db2jcc4驱动

    DB2是IBM公司开发的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。在DB2 11.5版本中,JDBC(Java Database Connectivity)驱动是连接Java应用程序与DB2数据库的关键组件。JDBC驱动允许Java代码通过...

    DB2自动备份数据库(DB2 MOVE)

    3. 使用系统时间来创建一个文件夹,该文件夹的命名以系统时间戳为依据,确保每次备份生成的文件夹都是唯一的。 4. 通过db2move命令执行备份操作。db2move命令将数据导出到指定的文件夹中,而db2look命令则生成相应...

    使用TPC-DS工具生成数据 for db2

    本教程将详细介绍如何使用TPC-DS工具来批量生成db2测试数据,以及涉及到的相关技术知识点。 首先,`tpcds-kit-master.zip`是一个包含TPC-DS工具源码的压缩包,解压后可以获取到生成测试数据所需的所有脚本和配置...

    DB2导出数据库表结构和数据.pdf

    db2look 是一个 DB2 命令行工具,用于生成数据库对象的 DDL 脚本。使用 db2look,我们可以导出数据库结构,例如表结构、索引、视图等。 语法:db2look -d db_name -e -a -x -i db_username -w db_passwd -o file_...

    Linux和windows下查看DB2端口号

    无论是Linux还是Windows操作系统环境,了解如何查看DB2的端口号对于系统管理员和数据库开发者而言都是必备技能。本文将深入探讨在Linux和Windows操作系统下查看DB2端口号的方法,帮助读者更好地管理DB2服务。 ### ...

Global site tag (gtag.js) - Google Analytics