调用带有Out返回值的Oracle存储过程

本文介绍了一种在EJB3.0环境下,通过Hibernate的EntityManager获取Connection来调用Oracle带Out参数的存储过程的方法,并提供了一个具体的实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在EJB 3.0中,传统的调用Oracle带Out返回值的存储过程是不被允许的。在项目中计算业务遇到了需要调用以上形式的存储过程,经过苦恼-纠结-痛苦直至变通。通过EntityManager获取到Hibernate的Session,再通过Session获取到Connection然后进行余下操作。


@Override
public Map executeToCollectPersonnel(Long formId, Long periodId,
String areaCode) {
Map<String, String> result = new HashMap<String, String>();
Session session = (Session) this.em.getDelegate();
Connection conn = session.connection();
try {
CallableStatement call = conn
.prepareCall("{CALL COLLECT_PERSONNEL(?,?,?,?)}");
call.setLong(1, formId);
call.setLong(2, periodId);
call.setString(3, areaCode);
call.registerOutParameter(4, oracle.jdbc.OracleTypes.VARCHAR);
call.execute();

String str = call.getString(4);
for(String temp : str.split(",")){
result.put(temp.split("#")[1], temp.split("#")[0]);
}
} catch (Exception e) {
e.printStackTrace();
}

return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值