ibatis调用存储过程入参问题

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();

猜你喜欢

转载自ninnd.iteye.com/blog/1180981
今日推荐