将对象表映射到不同架构上的java数据类型

将对象表映射到不同架构上的java数据类型,java,oracle,plsql,Java,Oracle,Plsql,我的数据库实例上有一个如下创建的对象表: CREATE OR REPLACE TYPE O_PWServiceWebreport AS OBJECT ( ELEMENTNAME VARCHAR2 (1000) ,AFFECTEDAS VARCHAR2 (1000) ,SERVICENAME VARCHAR2 (1000) ,SEVICETYPE VARCHAR2 (1000)

我的数据库实例上有一个如下创建的对象表:

CREATE OR REPLACE TYPE O_PWServiceWebreport
AS OBJECT (
            ELEMENTNAME  VARCHAR2 (1000)
           ,AFFECTEDAS   VARCHAR2 (1000)
           ,SERVICENAME  VARCHAR2 (1000)
           ,SEVICETYPE   VARCHAR2 (1000)
           ,STATUSCODE   VARCHAR2 (1000)
           ,SUBSCRIBER   VARCHAR2 (1000)
           ,SITEID       VARCHAR2 (1000)
           ,SITEFULLNAME VARCHAR2 (1000)
           ,ROUTE        VARCHAR2 (1000)
           ,THIRDPARTY   VARCHAR2 (1000)
           )

CREATE OR REPLACE TYPE T_PWServiceWebreport AS TABLE OF O_PWServiceWebreport
还有一个过程,它将输入一些类型为
tpwServiceWebReport
的输出参数结果

现在我需要通过调用这个过程将这个结果转换成一个java变量。 这是我的代码:

Connection oConnection = null;
    Statement nodeTypeQuery = null;
    CallableStatement procedureCallStatement = null;
    Driver myDriver = null;
    String getServiceByObjAndDimObj = "{call pkgcomsupport_service.process_PWservices(?,?)}";
    try{
        myDriver = (Driver)Class.forName("weblogic.jdbc.pool.Driver").newInstance(); 
        oConnection = myDriver.connect("datasource", null);
        procedureCallStatement = oConnection.prepareCall(getServiceByObjAndDimObj);
        procedureCallStatement.setString(1, objectId);
        procedureCallStatement.registerOutParameter(2, Types.ARRAY);
        procedureCallStatement.executeUpdate(); 
        Object[] rs = (Object[])((Array)procedureCallStatement.getObject(2)).getArray();
        for(Object tmp: rs){
            Struct row = (Struct) tmp;
            request.setAttribute("rs", tmp);
        }
    }catch(Exception ex){
        request.setAttribute("rs", ex.getMessage());
      }
      finally{
        try {  
            procedureCallStatement.close();
            procedureCallStatement = null;
        } catch (Exception e) { }
        try { 
            oConnection.close();
            oConnection = null; 
        } catch (Exception e) { }
    }
我在这件事上的错误是

ORA-03115:不支持的网络数据类型或表示形式

将plsql集合的名称作为参数添加到
registerOutParameter
会引发:

java.sql.SQLException:无效的名称模式:cramer_common.T_PWServiceWebreport


我认为这是因为plsql集合是在不同的模式下定义的,与过程的模式相同,但与调用方的模式不同,如上面的错误消息所示。

也许您应该将数组名称设置为

procedureCallStatement.registerOutParameter(2, Types.ARRAY, "T_PWServiceWebreport");