【发布时间】: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 集合是在不同的架构上定义的,与过程相同的架构,但与上面错误消息中看到的调用者不同。
【问题讨论】: