gpt4 book ai didi

java - 使用 LogicalConnection 传递数组/表 Oracle 类型

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:31 32 4
gpt4 key购买 nike

我有 Oracle 过程,它接受用户定义类型的输入。 UDT 是一个对象数组(另一个 UDT)。以下是类型声明。 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 它对于对象类型工作正常,但 createArrayOf 方法失败并出现异常:不支持的功能。

下面是我的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 获取连接。

等待您的回复。

最佳答案

通过外部引用 ojdbc jar 解决了问题,该 jar 实际上不包含 bar 文件中的 jar。

关于java - 使用 LogicalConnection 传递数组/表 Oracle 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24581258/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com