Java 访问从oracle过程返回的数组

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

我的oracle过程返回一个字符串数组,我从java方法调用该过程。 当我执行查询时,我得到以下异常

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值。