新建一个oracle 数组类型的type
create or replace type str_list as varray(1000) of varchar2(40)
新建一个简单的存储过程测试用:
create or replace procedure getReservoirReportForms(
stcds in str_list,
kk out varchar2
)
is
v_a varchar2(200);
begin
for i in 1.. stcds.count loop
v_a := v_a || stcds(i);
end loop;
kk:=v_a;
end;
java代码:
package com.linewell.service.impl;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
import oracle.jdbc.driver.OracleCallableStatement;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import com.linewell.service.inter.ReservoirReportForms;
import com.linewell.util.DatabaseUtil;
/**
* 水库综合报表
* @author Administrator
*
*/
public class ReservoirReportFormsImpl implements ReservoirReportForms{
@Override
public String getReservoirReportForms() {
String[] array ={"111","222","333","444","555","666"};
Connection conn = null;
OracleCallableStatement stmt =null;
try {
conn = DatabaseUtil.getConnection();
stmt =(OracleCallableStatement)conn.prepareCall("{call getReservoirReportForms(?,?)}");
ArrayDescriptor descriptor =
ArrayDescriptor.createDescriptor( "STR_LIST", conn );
ARRAY stcdStrings = new ARRAY( descriptor,conn,array);
stmt.setArray(1, stcdStrings);
stmt.registerOutParameter(2, Types.VARCHAR);
stmt.execute();
String result = stmt.getString(2);
System.out.println("result====="+result);
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args){
ReservoirReportFormsImpl a = new ReservoirReportFormsImpl();
a.getReservoirReportForms("", "", "", "");
}
}