一、问题

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

二、解决之法

public CbsResult payForBills(final String sapId, final String office,final ArrayList<String> 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/CORIScs.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 replace
type  CHAR_ARRAY  as table of VARCHAR2(20);

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

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

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

Java SpringMvc+hibernate架构中,调用Oracle中的sp,传递数组参数相关推荐

  1. Java中调用Oracle中的存储过程的单元测试代码

    Oracle中的存储过程: /* 创建一个存储函数,返回指定员工的姓名,薪水和年收入 */ create or replace function queryEmp2(eno in number, em ...

  2. cmd 调用oracle存储过程,asp.net中调用oracle存储过程的方法

    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果 ...

  3. JS中调用本地Winform程序并传递参数

    场景 JS中调用本地exe程序: JS中调用本地exe程序_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面的基础上怎样在js中调用本地winform程序并且传递参数. 注: 博客: ...

  4. .NET中使用ORACLE函数和过程并输出参数(1)

    Technorati 标签: .net, ADO.NET, oracle, DBHELPERORA 我们知道.NET中调用ORACLE 的过程没有调用MS-SQLSERVER中的存储过程那么方便,尤其 ...

  5. .NET中使用ORACLE函数和过程并输出参数(2)

    我们知道.NET中调用ORACLE 的过程没有调用MS-SQLSERVER中的存储过程那么方便,尤其用到参数输出的时候,但是ORACLE的功能强大不会这个不能处理,这个你懂得,呵呵. 2个解决方案,一 ...

  6. 天马行空W:在C++中调用DLL中的函数

    1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等 ...

  7. day12_oracle hint——SQL优化过程中常见Oracle中HINT的30个用法

    在SQL语句优化过程中,经常会用到hint, 以下是在SQL优化过程中常见Oracle中"HINT"的30个用法 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方 ...

  8. 在C++中调用DLL中的函数

    1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等 ...

  9. 在form2中调用form1中的方法并改变form1中控件值的另一种方法

    在窗体编程中,经常碰到到要在form2中调用form1中的方法并改变form1中控件值,但是又不能用new form1这种方法,因为这是生成一个实例. 网上有些说法是用委托和事件,笔者尝试没有成功,可 ...

最新文章

  1. 深入理解CSS变形transform(3d)
  2. 利用 iPhone X 的脸部识别能力为内容制作工作服务
  3. 用leda没有java enterprise选项_Visual Studio 支持 Java?谣言止于智者
  4. Android之查看网络图片和网页HTML
  5. 【janino】janino自定义函数报错A method named xx is not declared in any enclosing class nor through a static
  6. 【赠书】当深度学习遇上图: 图神经网络的兴起!
  7. 对天气数据进行简单的数据分析
  8. 台式电脑开机显示节电模式怎么办_台式电脑的开机密码忘记了怎么办?
  9. 计算机换汉语快捷键,电脑常用快捷键
  10. mysql执行计划id相同_MySQL|MySQL执行计划
  11. Kafka API: TopicMetadata
  12. 硬,软连接,以及在windows中的用法
  13. 伍德里奇计量经济学第四章课后计算机作业,伍德里奇---计量经济学第4章部分计算机习题详解(MATLAB).pdf...
  14. 教你使用SQLite Autoincrement(自动递增)
  15. mergeField解析(构造函数)
  16. C# 串口助手中英文显示问题
  17. 古代情感诗词top100
  18. c语言 simon 游戏,终于发现少儿英语游戏SimonSays(西蒙说)
  19. 在linux中使用tcpdump命令 – 监听网络流量
  20. 路由控制配置apply cost命令解析

热门文章

  1. php ajax取不到值,PHP没有从Ajax获取值
  2. 设计模式工厂方法模式
  3. Java DO到DTO转换利用spring 的BeanUtils.copyProperties
  4. android 的监控讲解,java android网络监测详解
  5. wamp php imagick,如何在wamp for Windows中安装和启用Imagick扩展 php psd 生成缩略图
  6. 【高并发】面试官:性能优化有哪些衡量指标?需要注意什么?
  7. 消息队列遥测传输(MQTT)介绍
  8. MYSQL数据库索引设计的原则
  9. EF调用存储过程实现分页
  10. java 创建者设计模式_Java设计模式之创建者模式分享热爱编程,程序人生