使用LogicalConnection传递Array / Table Oracle类型

时间:2014-07-04 22:19:34

标签: java sql oracle jdbc messagebroker

我有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获取连接。

等待你的回复。

1 个答案:

答案 0 :(得分:0)

通过外部引用ojdbc jar来解决问题,该jar实际上并没有在条形文件中包含jar。