`

用存储过程生成流水号

 
阅读更多
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'

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

    生成并发唯一性流水号的解决方案 ...该解决方案使用了表结构的设计、存储过程的设计和流水号的生成规则三个部分来实现唯一的流水号的生成。同时,该解决方案还进行了并发测试,以验证其可靠性和高效性。

    SQL存储过程自动生成流水

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

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

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

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

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

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

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

    java生成流水-格式202001270001

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

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

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

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

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

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

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

    自动流水号打印delphi源码

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

    通用流水号-sql版

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

    Oracle 中生成流水号的方法

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

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

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

Global site tag (gtag.js) - Google Analytics