【问题标题】:How to Pass multiple Values in objType parmeter如何在 objType 参数中传递多个值
【发布时间】:2019-01-16 13:23:46
【问题描述】:

如何将objType字段中的多个值传递给方法参数

目前我在 objType 字段中存储单行并将其作为输入传递给 oracle sp,现在我需要在 objType 中存储和传递多行。如何做到这一点? 我试过创建像多维的objType: 对象[] objType = 新对象[3][3], 它没有帮助。 请参阅下面的示例代码并提供帮助。

Object[] objType = new Object[3];
objType[0] = new Integer(lineNo);
objType[1] = new String(itemCode);
objType[2] = new Integer(ORDER_QTY));


structs[index]=conn.createStruct("XXHDB_REC", objType);
        Array reportsArray = ((OracleConnection)     

conn).createOracleArray("XXHDB_TBL_TYPE", structs);

//Input to oracle package
oracleCallableStmt.setArray(4, reportsArray);

我需要用固定的 3 列存储“n”行。 [n][3]。

Stored Proc Definition:
create_booking(p_reservation_id  => p_reservation_id, 
p_Hybris_Cust_nbr => p_Hybris_Cust_nbr,
p_cust_nbr        => p_cust_order_no,
p_group           => j.GROUP_ID,
p_order_lines     => v_rec) --> this is the input field

【问题讨论】:

  • 请编辑您的问题并包括您的存储过程的定义。谢谢。

标签: java oracle stored-procedures object-type recordtype


【解决方案1】:

您的示例代码 Object[] objType = new Object[3][3] 不起作用,因为 objType 的类型错误,它应该是 Object[][] objType = new Object[n][3]。但是,如果您知道要存储的值,我强烈建议不要使用 Object 作为类型,而是可以为它们使用某种容器,例如:

class Container {
    private Integer lineNo;
    private String itemCode;
    private Integer ORDER_QTY;

    // rest omitted
}

然后使用它作为你的类型你的数组或你想使用的任何东西。 Container[] objType = new Container[n];.

【讨论】:

  • 但是我想传递表格类型作为输入参数,我可以像这样传递类对象吗?
  • 是的,您可以根据需要使用二维数组与 Object[][] objType = new Object[n][3] 并添加到其中 objType[index] = table 其中table 是普通数组,如 Object[] table = new Object[3]
  • 我创建了一个二维数组 Object[][] objType = new Object[itemSize][3];对象[] obj = 新对象[3];给 obj 赋值后,我把它赋值给了 objType, objType[index]=obj;毕竟,在将 objType 分配给结构时, structs[index]=conn.createStruct("XXHDB_REC", objType);我收到“Java.sql.sqlException:Java 和 sql 对象类型不一致”
猜你喜欢
  • 1970-01-01
  • 2013-10-12
  • 2013-10-26
  • 1970-01-01
  • 2013-11-21
  • 2012-06-12
  • 1970-01-01
  • 2019-03-21
相关资源
最近更新 更多