将对象表映射到不同架构上的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");