我有Oracle过程,它接受用户定义的Type输入。 UDT是Object(另一个UDT)的数组。以下是Type声明。 IBM Integration Bus JDBC可配置服务用于获取LogicalConnection,它始终提供LogicalConnection。
create or replace Type R_OpenCloseRecords as Object(VSerial_No number, VError_Code varchar2(2), VReason varchar2(255), VStatus char(1));
create or replace Type T_OpenCloseType as varray(100) of R_OpenCloseRecords ;
procedure UpdateOpenCloseRecord(VOpenCloseType in T_OpenCloseType);
我也尝试过上面的记录表。
我用java oracle类型ArrayDescriptor和StructDescriptor尝试了上面的场景。但它返回此异常:oracle.jdbc.driver.LogicalConnection与oracle.jdbc.OracleConnection不兼容
如果我使用java.sql.Struct它适用于Object类型,但createArrayOf方法失败,但异常:Unsupported Feature。
以下是我的java代码片段:
callableStatement = connection.prepareCall("{call " + schemaPackageName + ".UpdateOpenCloseRecord(?)}");
//callableStatement.registerOutParameter(1, Types.OTHER);
callableStatement.setQueryTimeout(timeOut);
// StructDescriptor R_OpenCloseRecords = StructDescriptor.createDescriptor("R_OpenCloseRecords", connection);
// Object[] arrayObjectRecord = { data.getSerialNo(), data.getErrorCode(), data.getReason(), data.getStatus() };
// STRUCT RecordStruct = new STRUCT(R_OpenCloseRecords, connection, arrayObjectRecord );
Object[] arrayObjectRecord = { Integer.parseInt(data.getSerialNo()), data.getErrorCode(), data.getReason(), data.getStatus() };
Struct recordStruct = connection.createStruct((schemaName+ ".R_OpenCloseRecords").toUpperCase(), arrayObjectRecord);
// STRUCT[] arrayObjectTable = {RecordStruct};
// ArrayDescriptor T_OpenCloseType = ArrayDescriptor.createDescriptor(
// schemaPackageName+ ".T_OpenCloseType", connection);
// VOpenCloseArray = new ARRAY(T_OpenCloseType, connection, arrayObjectTable);
Object[] arrayObjectTable = {recordStruct};
callableStatement.setObject(1,connection.createArrayOf((schemaName+ ".T_OpenCloseType").toUpperCase(), arrayObjectTable) );
//callableStatement.setObject(1, arrayObjectTable, Types.ARRAY);
//callableStatement.setArray(1,VOpenCloseArray);
callableStatement.execute();
您可能会在评论中看到描述符的使用。使用MbJavaComputeNode的getJDBCType4Connection获取连接。
等待你的回复。
答案 0 :(得分:0)
通过外部引用ojdbc jar来解决问题,该jar实际上并没有在条形文件中包含jar。