2

我的 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

4

2 回答 2

1

我遇到了类似的问题。我的第一个猜测是驱动程序的子版本(11.2.0.3)与数据库的版本(11.2.0.2)不匹配,但事实并非如此。

我最终通过在数据库中声明一个返回类型并改为调用它来工作stmt.registerOutParameter(2, OracleTypes.ARRAY, "TYPE_NAME");

此处提供了一个示例: CallableStatement + registerOutParameter + 多行结果

于 2013-12-12T14:06:03.353 回答
0

我现在无法测试您的代码,但似乎问题如下:

如果您正在使用,OracleTypes那么您应该使用OracleCallableStatement

OracleCallableStatement cs = con.prepareCall(procCall);

另外,如果您想使用CallableStatement尝试java.sql.Types.ARRAY

干杯!!

于 2013-09-26T20:55:05.423 回答