Java 访问从oracle过程返回的数组
我的oracle过程返回一个字符串数组,我从java方法调用该过程。 当我执行查询时,我得到以下异常Java 访问从oracle过程返回的数组,java,arrays,oracle,stored-procedures,jdbc,Java,Arrays,Oracle,Stored Procedures,Jdbc,我的oracle过程返回一个字符串数组,我从java方法调用该过程。 当我执行查询时,我得到以下异常 java.sql.SQLException: ORA-03115: unsupported network datatype or representation 注: 我在这里使用过OracleTypes.ARRAY,但我也尝试过使用Types.ARRAY,但它仍然给了我同样的错误 我的Java方法: public void searchRecords() throws FinderExcep
java.sql.SQLException: ORA-03115: unsupported network datatype or representation
注:
我在这里使用过OracleTypes.ARRAY,但我也尝试过使用Types.ARRAY,但它仍然给了我同样的错误
我的Java方法:
public void searchRecords() throws FinderException{
Session session = getCurrentSession();
Connection con = session.connection();
CallableStatement stmt = null;
String procCall = "call pkg_inquiry.test2(?,?)";
try{
stmt = con.prepareCall(procCall);
stmt.setInt(1, 1);
stmt.registerOutParameter(2, OracleTypes.ARRAY);
//stmt.registerOutParameter(2, Types.ARRAY);
stmt.execute(); //-----------This statement causes exception
}catch(SQLException e){
System.out.println(e.getMessage());
}
}
我的程序:
PROCEDURE test2(
p_in in INTEGER,
p_out OUT header_row_vt
)
is
BEGIN
p_out := header_row_vt('NAME', 'AGE', 'CITY', 'STREET');
END test2;
如果您想知道我正在使用Oracle 11.2和jdbc 11.2,我现在无法测试您的代码,但问题似乎如下: 如果您使用的是
OracleTypes
,那么您应该使用OracleCallableStatement
OracleCallableStatement cs = con.prepareCall(procCall);
如果您想使用CallableStatement
也可以尝试java.sql.Types.ARRAY
干杯 我也遇到了类似的问题。我的第一个猜测是驱动程序的子版本(11.2.0.3)与数据库的版本(11.2.0.2)不匹配,但事实并非如此 通过在数据库中声明一个返回类型并调用
stmt.registerOutParameter(2,OracleTypes.ARRAY,“type_NAME”)代码>取而代之
此处提供了一个示例:
请尝试OracleCallableStatement cs=con.prepareCall(procCall)代码>,将在当天晚些时候进行测试;我得到了类强制转换异常。你能为pkg_查询提供完整的包定义吗?我不认为使用OracleTypes.ARRAY还是Types.ARRAY有什么区别,因为它们都引用2003的int值。