解决Oracle若干元素输入,返回若干结果集的问题。
主要内容:
1.构建一个可以输入不定长度数组,一个可以输出不定长度数组。
2.使用ResultSet接收返回的多个结果集。
*创建需要的类型和存储过程
create or replace type input_arr as table of varchar2(32);
create or replace type item_row as object(a varchar2(32), b varchar2(32), c varchar2(32));
create or replace type output_arr as table of item_row;
create or replace procedure arr_input2arr_output(i_arr in input_arr, o_arr out output_arr) as
cursor cursor1 is select a, b, c from t;
arr_len number;
begin
arr_len:=i_arr.count;
o_arr:=output_arr();
for i in 1 .. arr_len loop
for item in cursor1 loop
o_arr.extend();
o_arr(o_arr.last):=item_row(item.a, item.b, item.c);
end loop;
end loop;
end arr_input2arr_output;
*jdbc请求及结果集处理
Connection conn = null;
CallableStatment cs = null;
OracleConnecion oracleconn = null;
try{
conn = jdbcTemplate.getDataSource().getConnection();
cd = conn.prepareCall("{call arr_input2arr_output(?,?)}");
if(conn.isWrapperFor(OracleConnection.class)){
oracleconn = conn.unwrap(OracleConnection.class);
}
Srting a = {"a", "b", "c", "d"};
Array array = oracleconn.createOracleArray("INPUT_ARR", a);
cs.setArray(1, array);
cs.registerOutParameter(2, OracleTypes.ARRAY, "OUTPUT_ARR)");
cs.execute();
Array arr = cs.getArray(2);
//jdbc推荐使用ResultSet来接收返回的结果集
ResultSet rs = arr.getResultSet();
while(rs.next()){
Struct struct = (Struct) rs.getObject(2);
Object[] obj_arr = struct.getAttributes();
}
}catch(Exception e){
//do something
}finnally{
//close all stream
}