oracle存储过程生成流水号,用存储过程生成流水号

public class DefaultWmsGenerateSequenceDaoManager extends HibernateDaoSupport implements

WmsGenerateSequenceDaoManager {

public Map generateSequence(final String keyName) {

return (Map) 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 result = new HashMap();

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值