用存储过程生成流水号

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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值