比如传一个学生的集合至ORACLE存储过程
1、首先定义STUDENT TYPE
CREATE OR REPLACE TYPE STU AS OBJECT ( id number, name varchar2(20), code varchar2(20) )
2、定义集合类型 STULIST TYPE
CREATE OR REPLACE TYPE STULIST AS TABLE OF stu
3、建立对应的表
drop table student create table student( id number primary key not null, name varchar2(20), code varchar2(20) )
4、建立存储过程(测试)
create or replace procedure getStu(uList in STULIST,ret_cursor out sys_refcursor) as begin dbms_output.put_line(uList.Count); open ret_cursor for select * from student; end;
5、java代码调用(这里用的HIBERNATE,以及tomcat连接池(存储过程名称以及TYPE名称都需要大写)
public void test(){ getSession().doWork(new Work() { @Override public void execute(Connection conn) throws SQLException { CallableStatement call = conn.prepareCall("{Call getStu(?,?)}"); PoolableConnection poolConnection = (PoolableConnection)conn.getMetaData().getConnection(); Connection oracleConn = poolConnection.getDelegate();//这里获取的才是native连接 StructDescriptor recDesc = StructDescriptor.createDescriptor("STU", oracleConn); ArrayList<STRUCT> pstruct = new ArrayList<STRUCT>(); List<Student> stuList = Student.createList(); for(int i=0;i<stuList.size();i++){ Object[] record = new Object[3]; record[0] = stuList.get(i).getId(); record[1] = stuList.get(i).getName(); record[2] = stuList.get(i).getCode(); STRUCT item = new STRUCT(recDesc, oracleConn, record); pstruct.add(item); } oracle.sql.ArrayDescriptor uListDesc = oracle.sql.ArrayDescriptor.createDescriptor("STULIST", oracleConn); oracle.sql.ARRAY uListArray = new oracle.sql.ARRAY(uListDesc, oracleConn, pstruct.toArray()); call.setArray(1, uListArray); call.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR); call.execute(); ResultSet rs = (ResultSet)call.getObject(2); while(rs.next()){ System.out.println(rs.getString("name")); } } }); }
注意:如果用的是C3P0,并且使用了SPRING可以用以下方法获取本地连接
Connection conn = setter.getPreparedStatement().getConnection(); C3P0NativeJdbcExtractor cp30NativeJdbcExtractor = new C3P0NativeJdbcExtractor(); conn = (OracleConnection) cp30NativeJdbcExtractor .getNativeConnection(conn);
相关推荐
Spring jdbcTemplate调用Oracle存储过程返回List集合
Java调用带参数的Oracle 存储过程并返回集合,
Java调用Oracle存储过程的方法
Java调用oracle函数返回oracle类(类似)集合
java调用Oracle存储过程的简单源码示例, 包括无返回参数,返回单个参数和返回参数集合三种调用情况!
基本查询 过滤和排序 单行函数 组函数 多表查询 子查询 集合运算 创建和管理表 光标 例外 Java调用存储过程和存储函数 触发器
Oracle集合类型输出参数的PLSQL存储过程及其Java调用.docxOracle集合类型输出参数的PLSQL存储过程及其Java调用.docx
Oracle集合类型输出参数的PLSQL存储过程及其Java调用
《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库...完整案例来介绍基于Java开发包和Oracle数据库进行案例开发的详细过程...
│ Java面试题31.jdbc调用存储过程.mp4 │ Java面试题32.简单说一下你对jdbc的理解.mp4 │ Java面试题33.写一个jdbc的访问oracle的列子.mp4 │ Java面试题34.jdbc中preparedStatement比Statement的好处.mp4 │ Java...
Java面试题31.jdbc调用存储过程 Java面试题32.简单说一下你对jdbc的理解 Java面试题33.写一个jdbc的访问oracle的列子 Java面试题34.jdbc中preparedStatement比Statement的好处 Java面试题35.数据库连接池的作用 Java...
brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准...
brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准...
《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库...完整案例来介绍基于Java开发包和Oracle数据库进行案例开发的详细过程...
Q0032 Oracle的集合操作函数,如sum(),avg(),max(),min(),与select,where,grouby,having的先后顺序,使用方法 Oracle集合查询基本知识,只有进行分组的列,才可以取在集合查询SQL语句中取字段,先Group By,再Having...
作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...
7.limit属性 ,返回集合中最大元素的个数 8.next属性,next(x)返回位置x处的后面的那个元素 的索引 9.prior属性 prior(x)返回 x处前面的那个元素的下标 10.trim 方法 删除元素,删除集合中最后一个元素 ...