`

用存储过程生成流水号

 
阅读更多
public class DefaultWmsGenerateSequenceDaoManager extends HibernateDaoSupport implements
		WmsGenerateSequenceDaoManager {

	public Map<String, Object> generateSequence(final String keyName) {
		return (Map<String, Object>) this.getHibernateTemplate().execute(new HibernateCallback() {
		    public Object doInHibernate(Session session) throws HibernateException, SQLException {
			    // 需要执行的存储过程
			    String procedure = "{call wms.GenSeq(?,?)}";
			    CallableStatement callableStatement = session.connection().prepareCall(procedure);
			    // 设置输入参数
			    callableStatement.setString(1, keyName);
			    // 注册输出参数
			    callableStatement.registerOutParameter(2, java.sql.Types.DOUBLE);
			    
			    callableStatement.execute();
			    // 取回输出参数
			    Double retValue = callableStatement.getDouble(2);
			   	Map<String, Object> result = new HashMap<String, Object>();
			    result.put("retValue", retValue);
			    callableStatement.close();
			    return result;
		    }
		});
	}
}

 GenSeq.sql

---生成流水号
create or replace procedure GenSeq(keyName in  varchar, retValue out number) is

       next_id sequence.next_id%TYPE;
       id sequence.id%TYPE;
   ---user  seqSequence.nextval for the key id of sequence

BEGIN
  --IF  return -1 then identified incorrect call
   retValue:=-1;

   SELECT next_id  INTO  next_id FROM  sequence WHERE sequence_key=ltrim(rtrim(keyName));--去掉头为空格


   UPDATE sequence SET next_id=next_id+1 WHERE   sequence_key=ltrim(rtrim(keyName));

   COMMIT;

   retValue:=next_id+1;

   --DBMS_OUTPUT.put_line(retValue);
EXCEPTION
   WHEN NO_DATA_FOUND THEN
             ---New key value found
             BEGIN


                  INSERT INTO sequence (id,sequence_key,sequence_type,next_id)
                         VALUES (seqSequence.Nextval,keyName,' ',1);

                  retValue:=1;

                  COMMIT;

                --  DBMS_OUTPUT.put_line(retValue);
             EXCEPTION
                  WHEN OTHERS THEN
                       ROLLBACK;
             END;
   WHEN OTHERS THEN
               ROLLBACK;
end GenSeq;

 

分享到:
评论

相关推荐

    存储过程实现生成流水号

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

    mybatis+mysql 使用存储过程生成流水号的实现代码

    本篇文章将深入探讨如何在MyBatis框架中结合MySQL存储过程来生成流水号。 首先,存储过程`GetSerialNo`接受一个输入参数`tsCode`,类型为VARCHAR(50),并返回一个VARCHAR(200)类型的`result`。该过程的主要目的是为...

    mysql 流水号 存储过程 附表结构

    总的来说,了解如何在MySQL中创建和使用存储过程生成流水号,对于开发高效且健壮的数据库应用至关重要。结合附带的表结构,我们可以构建一个强大的流水号生成系统,既能满足业务需求,又易于扩展和维护。

    自动生成流水账号的存储过程 格式为 年月日+’0001‘

    用于自动生成流水账号的存储过程 有详细的注释

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

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

    根据当天日期生成流水单号存储过程,格式:年月日+'0001'

    根据当天日期生成流水单号存储过程 格式为 年月日+'0001'

    SQL存储过程自动生成流水

    除了存储过程外,还可以使用函数来自动生成流水号。以下是一个示例: ```sql CREATE FUNCTION f_NextBH() RETURNS char(8) AS BEGIN RETURN (SELECT 'BH' + RIGHT('000000' + CAST(ISNULL(RIGHT(MAX(BH), 6), 0) +...

    生成并发唯一性流水号的解决方案.doc

    本文将详细介绍一个生成并发唯一性流水号的解决方案,该方案结合了SQL和C#技术,通过精心设计的表结构、存储过程以及流水号生成规则,实现了高效可靠的流水号生成机制。 首先,我们从表结构的设计开始。为了支持并...

    建表sql、生成流水号存储过程

    建表sql、生成流水号存储过程

    JAVA生成订单号(日期+流水号)

    2. **流水号**:生成流水号通常需要一个全局变量,如原子整型(`AtomicInteger`),以保证在多线程环境中的安全性。初始化原子整型为0,每次生成订单号时自增1,然后取其值作为流水号: ```java AtomicInteger ...

    c#后台生成不重复的订单号及后台存储过程

    这种方法能够生成连续的流水号编码,但可能会在多用户同时操作时产生冲突。为了避免这种冲突,可以在保存之前进行检查或使用其他机制确保唯一性。 ### SQL存储过程应用 存储过程`PWMS_GetMaxNo`的具体实现未在代码...

    java生成流水-格式202001270001

    在Java编程中,生成流水号是一项常见的需求,特别是在金融、电商等系统中,流水号作为交易的唯一标识,对于数据的追踪和管理至关重要。在这个场景中,“java生成流水-格式202001270001”指的是一个Java程序,用于...

    NET 流水号的生成源代码(附数据库)

    总的来说,这个资源对于理解如何在.NET环境中结合C#、ASP.NET和SQL数据库生成流水号非常有价值。通过深入研究源代码,你可以学习到数据库设计、并发控制、事务处理和Web应用开发等多个方面的知识。同时,这也可以...

    NET 如何进行流水号的生成的案例及源代码(附数据库)

    在.NET开发中,生成流水号是一项...这个资源中的源代码应该包含了上述功能的实现,通过学习和研究,你可以更好地理解如何在.NET环境中生成流水号并与数据库配合使用。这是一个非常实用的技能,在许多项目中都会用到。

    .NET 流水号的生成源代码(附:数据库)

    本资源提供了一种.NET平台下生成流水号的源代码实现,同时也结合了SQL Server数据库的使用,适用于SQL Server 2005/2008版本,并且兼容Visual Studio 2008/2010开发环境。 首先,生成流水号的主要目标是确保每个...

    自动流水号打印delphi源码

    标签“流水号”表明该程序的核心功能是生成流水号,“自动”意味着这个过程是自动化的,无需人工干预。“delphi源码”则表示这个程序的源代码是用Delphi编写的,对于开发者来说,这意味着他们可以查看、学习甚至修改...

    通用流水号-sql版

    流水号是现在各类系统中单据的必备字段,因为流水...在SqlServer中,可以通过客户端程序来生成新的流水号,也可以利用存储过程来生成.在实际的项目中,利用自定义函数来生成非常方便,方便存储过程调用,也方便客户端的调用.

    用JS实现根据当前时间随机生成流水号或者订单号

    结合上述要点,以下将详细展开用JS实现基于当前时间随机生成流水号或订单号的知识点。 ### 1. 获取当前时间 在JS中,可以通过Date对象获取当前的时间信息,包括年、月、日、小时、分钟和秒。这是生成流水号或订单号...

    Oracle 中生成流水号的方法

    在实际应用中,除了上述方法,还可以考虑其他策略来生成流水号,比如使用子表存储未分配的流水号,每次分配时从子表中取出并删除,以防止并发问题。这种方法适用于需要连续流水号但不显示在界面的情况。 总的来说,...

Global site tag (gtag.js) - Google Analytics