应用程序传递到oracle存储过程的字符串数组参数得不到值,都是空值。但是number数组没有问题?请问各位兄弟姐妹,有什么解决的办法? 下面是我的代码: /**自定义number数组**/
create or replace type array_num is table of number; /**自定义varchar2数组**/
create or replace type array_varchar2_50 is table of varchar2(50); /**测试存储过程**/
create or replace procedure testArray(resNumber in array_varchar2_50,
a_num in array_num,
procResult out array_varchar2_50) is
begin
procResult := new array_varchar2_50();
for i in 1 .. resNumber.Count loop
procResult.EXTEND;
procResult(i) := resNumber(i) || '-' || a_num(i) || '-lucifer' || i;
end loop;
end; /**java调用**/
OracleConnection conn = null;
OracleCallableStatement stmt = null;
String[] param = { "1001", "1002", "1006" };
Integer[] num = {1,2,3};
stmt = (OracleCallableStatement) con.prepareCall("{call testArray(?,?,?)}");
// 类型名必须大写
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor(
"ARRAY_VARCHAR2_50", con);
ArrayDescriptor descriptorNUM = ArrayDescriptor.createDescriptor(
"ARRAY_NUM", con);
stmt.setArray(1, new ARRAY(descriptor, con, param));
stmt.setArray(2, new ARRAY(descriptorNUM, con, num));
stmt.registerOutParameter(3, OracleTypes.ARRAY, "ARRAY_VARCHAR2_50");
stmt.execute(); ARRAY array = stmt.getARRAY(3);
Datum[] data = array.getOracleArray();
for (int i = 0; i < data.length; i++) {
System.out.println(i + " : " + new String(data[i].shareBytes()));
}
create or replace type array_num is table of number; /**自定义varchar2数组**/
create or replace type array_varchar2_50 is table of varchar2(50); /**测试存储过程**/
create or replace procedure testArray(resNumber in array_varchar2_50,
a_num in array_num,
procResult out array_varchar2_50) is
begin
procResult := new array_varchar2_50();
for i in 1 .. resNumber.Count loop
procResult.EXTEND;
procResult(i) := resNumber(i) || '-' || a_num(i) || '-lucifer' || i;
end loop;
end; /**java调用**/
OracleConnection conn = null;
OracleCallableStatement stmt = null;
String[] param = { "1001", "1002", "1006" };
Integer[] num = {1,2,3};
stmt = (OracleCallableStatement) con.prepareCall("{call testArray(?,?,?)}");
// 类型名必须大写
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor(
"ARRAY_VARCHAR2_50", con);
ArrayDescriptor descriptorNUM = ArrayDescriptor.createDescriptor(
"ARRAY_NUM", con);
stmt.setArray(1, new ARRAY(descriptor, con, param));
stmt.setArray(2, new ARRAY(descriptorNUM, con, num));
stmt.registerOutParameter(3, OracleTypes.ARRAY, "ARRAY_VARCHAR2_50");
stmt.execute(); ARRAY array = stmt.getARRAY(3);
Datum[] data = array.getOracleArray();
for (int i = 0; i < data.length; i++) {
System.out.println(i + " : " + new String(data[i].shareBytes()));
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货