【问题标题】:Mapping table of objects to java dataype on different schemas将对象表映射到不同模式中的 java 数据类型
【发布时间】:2017-03-03 15:13:01
【问题描述】:

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

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

还有一个过程可以输入T_PWServiceWebreport 类型的一些输出参数结果。

现在我需要通过调用此过程将此结果转换为 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 集合是在不同的架构上定义的,与过程相同的架构,但与上面错误消息中看到的调用者不同。

【问题讨论】:

    标签: java oracle plsql


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2015-08-27
      相关资源
      最近更新 更多