博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java SpringMvc+hibernate架构中,调用Oracle中的sp,传递数组参数
阅读量:5316 次
发布时间:2019-06-14

本文共 1824 字,大约阅读时间需要 6 分钟。

一、问题

  我们调用数据,大都是可以直接获取表中的数据,或者用复杂点的sql语句组成的。但是,有时候,当这样达不到我们要的全部数据的时候,这时,我们就用到了存储过程【sp】,如果sp需要参数是数组的话,要怎么办呢?

二、解决之法

public CbsResult payForBills(final String sapId, final String office,final ArrayList
custCdes) { Connection con = DBUtil.getCbsConnection(); ArrayDescriptor arrDesc; ARRAY arr; CbsResult cbs=null; CallableStatement cs=null; try { cs=con.prepareCall("{call CBS_TEST.CBS_PKG_EMF_PCARD.CBS_PRC_PCARD_DEDUCT_ITF(?,?,?,?,?,?,?,?,?,?)}"); arrDesc = ArrayDescriptor.createDescriptor("CBS_TEST.CHAR_ARRAY", getNativeConnection(con)); arr = new ARRAY(arrDesc, getNativeConnection(con), custCdes.toArray()); cs.setString(1, sapId); cs.setString(2, office); cs.setArray(3, arr); cs.setString(4, "EMF"); cs.setString(5, "EB");// EB/CORIS cs.setString(6, "OB"); cs.setString(7, "O"); cs.setString(8, "DEDUCT"); cs.registerOutParameter(9, OracleTypes.VARCHAR); cs.registerOutParameter(10, OracleTypes.VARCHAR); cs.execute(); cbs=new CbsResult(cs.getString(9), cs.getString(10), null); } catch (SQLException e) { e.printStackTrace(); }finally{ DBUtil.close(con, cs, null); } return cbs==null?new CbsResult():cbs; }

注意:

  1、数组参数,必须在oracle数据库的存储过程中定义一个集合类型:

create or replacetype  CHAR_ARRAY  as table of VARCHAR2(20);

  2、红色字体是存储过程中,数组的定义的名字,一定要保持一致。

  3、绿色字体,是数组参数具体的实现方法。

转载于:https://www.cnblogs.com/renxiaoren/p/5511899.html

你可能感兴趣的文章
关于 linux 的 limit 的设置
查看>>
HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)
查看>>
vim中文帮助教程
查看>>
MySQL基础3
查看>>
云计算数据与信息安全防护
查看>>
全局设置导航栏
查看>>
RxJS & Angular
查看>>
面向对象(多异常的声明与处理)
查看>>
MTK笔记
查看>>
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
无法根据中文查找
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
转载 python多重继承C3算法
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
面向对象:反射,双下方法
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
Java面向对象重要关键字
查看>>