CREATE OR REPLACE TYPE EMP_SALARY_REC AS OBJECT (
EMP_ID NUMBER(5),
EMP_NAME VARCHAR2(255),
START_DATE DATE,
SALARY NUMBER
);
/
CREATE OR REPLACE Type EMP_SALARY_TAB AS TABLE OF EMP_SALARY_REC;
/
next we will create a small package with one single test procedure
CREATE OR REPLACE PACKAGE EMP_SALARY_PKG IS
PROCEDURE GET_EMP_SALARIES(i_array IN EMP_SALARY_TAB,o_array OUT
EMP_SALARY_TAB);
End EMP_SALARY_PKG;
/
<!-- 本地连接抽取器 --> <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.WebSphereNativeJdbcExtractor" /> Java代码: //获取连接,如果在事物内,获取事物连接,否则获取新连接,连接实现与web容器有关 Connection conn = DataSourceUtils.getConnection(dataSource); //conn = nativeJdbcExtractor.getNativeConnection(conn);was下需要转换,was下的连接与oracle连接都有各自的实现 //描述构建自定义类型 StructDescriptor sd = new StructDescriptor(type, (OracleConnection)conn); // type,自定义类型名称 STRUCT[] struct = new STRUCT[size]; for (int i=0;i<size;i++){ //填充数据 struct[i]=new STRUCT(sd,conn,Object[]);//Object[]此处的数组对应自定义类型字段定义顺序,为字段值集合 } //描述构建自定义数组类型 ArrayDescriptor ad = ArrayDescriptor.createDescriptor(typeArray, conn);// typeArray ,自定义集合名称 //填充数据 ARRAY array = new ARRAY(ad, conn, struct); OracleCallableStatement callStatement = (OracleCallableStatement)conn.prepareCall("{call package.procedure(?)}"); callStatement.setARRAY(1, array);//自定义集合类类型 // callStatement.setSTRUCT(arg0, arg1)类型参数 //执行 r = callStatement.executeUpdate();