java调用oracle存储过程
·
一、调用存储过程,返回单个值
方法介绍
以下是一个输入身份证号码,返回对应手机号码的存储过程。先看下oracle中调用该存储过程的流程:
1、plsql测试
①在plsql中找到要调用的存储过程,右键点击测试
②输入身份证号码,再点击左上角的启动调试器按钮,就会返回对应的手机号码

以上就实现了plsql调用存储过程的流程,结果也验证无误。
1、java代码测试
Test文件中举例,入参封装在HashMap里面
//调用存储过程,返回单个值
@Test
void callProcedure() {
HashMap<String, Object> map = new HashMap<>();
// 这里的deptNo和 GyBrjbxxkDao.xml中定义的名称 一致!
map.put("as_sfz","4415812012XXXXXXXX");
brdaMapper.findDeptNameById(map);
// 取得返回的内容,其实只要存储过程执行后, map里就有值了
// d_Name和Mapper.xml中的变量名一致
System.out.println(map.get("as_phonenum"));
}
mapper层:
void findDeptNameById(Map<String,Object> map);
mapper.xml 层
<select id="findDeptNameById" statementType="CALLABLE" parameterType="map">
<!-- <![CDATA[ 和 ]]> 加不加都可以
1.传入传出参数要注明mode=IN/OUT
2.并要注明jdbcType(在网上可以查询mybatis支持哪些jdbcType类型), jdbcType=INTEGER jdbcType=VARCHAR 等
3.返回参数要注明对应的resultMap
4.注意:这里deptNo,d_Name都是参数map集合的key值. 形参,和过程中的参数名无需一致
-->
<![CDATA[
{call pkg_for_jkk.sp_jkk_GetPhoneNumber(
#{as_sfz,mode=IN,jdbcType=VARCHAR},
#{as_phonenum,mode=OUT,jdbcType=VARCHAR}
)}
]]>
</select>
点击启动按钮:

执行结果如下:

二、调用存储过程,返回多个值, 其中一个是游标
方法介绍
以下是一个输入两个号码,返回是否有缴费记录的存储过程。先看下oracle中调用该存储过程的流程:
①在plsql中找到要调用的存储过程,右键点击测试
②输入2个号码,再点击左上角的启动调试器按钮,就会返回对应的缴费记录结果

以上就实现了plsql调用存储过程的流程,结果也验证无误。
1、java代码测试
Test文件中举例,入参封装在HashMap里面
//调用存储过程,返回多个值, 其中一个是游标
@Test
void callProcedure2() {
HashMap<String, Object> map = new HashMap<>();
// 这里的deptNo和 GyBrjbxxkDao.xml中定义的名称 一致!
map.put("as_patientNo","03XXXX");
map.put("as_patientID","20XXX");
brdaMapper.findAllDeptProcedure(map);
// 取得返回的内容,其实只要存储过程执行后, map里就有值了
// d_Name和Mapper.xml中的变量名一致
System.out.println(map.get("as_result"));
System.out.println(map.get("as_errorInfo"));
// 取出返回的结果集,这里变量名“deptList” 和 GyBrjbxxkDao.xml中定义的名称 一致!
List<ads_rc> list = (List<ads_rc>) map.get("ads_rc");
// 返回结果转JsonArr
JSONArray jsonArray = (JSONArray) JSONArray.toJSON(list);
System.out.println(jsonArray);
}
mapper层:
void findAllDeptProcedure(Map<String,Object> map);
mapper.xml 层
<!-- 调用oracle存储过程返回多个结果集 参数名:ads_rc自定义的,用于外面Map取值:map.get("deptList"));-->
<select id="findAllDeptProcedure" statementType="CALLABLE">
<![CDATA[
{call pkg_for_jkk.sp_jkk_get_tbkk(
#{as_patientNo,mode=IN,jdbcType=VARCHAR},
#{as_patientID,mode=IN,jdbcType=VARCHAR},
#{as_result,mode=OUT,jdbcType=VARCHAR},
#{as_errorInfo,mode=OUT,jdbcType=VARCHAR},
#{ads_rc, mode=OUT,jdbcType=CURSOR,javaType=ResultSet,resultMap=ads_rcMap}
)}
]]>
</select>
同理,在代码中点击启动按钮,并执行即可
以上,就是java实现了调用oracle的存储过程的全流程
请关注我吧,一起来探讨技术的奥秘,交流更多的技术经验!

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)