【问题标题】:How to specify IN parameter that as Oracle data type of TABLE type?如何将 IN 参数指定为 TABLE 类型的 Oracle 数据类型?
【发布时间】:2012-05-13 20:52:44
【问题描述】:

基于上一个关于stackoverflow的问题:

Fetch Oracle table type from stored procedure using JDBC

答案为我们提供了一个使用 Oracle getArray 和 java.sql.Datum 的 OUT 参数示例。但是如果我想指定数据类型为 Oracle TABLE 类型的 IN 参数怎么办?

CREATE OR REPLACE TYPE XXINV.XX_PROD_SRCH_RSLT_REC_TYPE IS OBJECT(

item_no                   VARCHAR2(30),  
inventory_item_id         NUMBER,  
organization_id           NUMBER,  
item_description          VARCHAR2(240),  
item_long_description     VARCHAR2(240), 
cat_description           VARCHAR2(240),  
category_set_name         VARCHAR2(240),  
nla_flag                  VARCHAR2(1),  
CONSTRUCTOR  FUNCTION XX_PROD_SRCH_RSLT_REC_TYPE RETURN SELF AS RESULT , 
MEMBER PROCEDURE log_prod_srch_rslt_rec_values (SELF  IN  XX_PROD_SRCH_RSLT_REC_TYPE) )

CREATE OR REPLACE TYPE xxinv.XX_PROD_SRCH_RSLT_TAB_TYPE AS TABLE OF XX_PROD_SRCH_RSLT_REC_TYPE;

我的 SP 是这样的:

XX_PART_RESEARCH_PKG .GET_PARTS
   (p_called_from          IN     VARCHAR2,
    p_item_id              IN     NUMBER,
    p_category_id          IN     NUMBER,
    p_mnfg_part_id         IN     NUMBER,
    p_item_desc            IN     VARCHAR2,
    p_include_NLA_items    IN     VARCHAR2,
    p_catl_group_id        IN     NUMBER,
    p_catl_attributes      IN     XX_PROD_ATTR_TAB_TYPE,
    x_srch_rslt            IN    XX_PROD_SRCH_RSLT_TAB_TYPE,
    x_return_status        OUT    VARCHAR2,
    x_returb_msg           OUT    VARCHAR2
   )

其中 XX_PROD_ATTR_TAB_TYPE 是作为 IN 参数的表。

如何在 Java 中指定这个?我正在使用 Oracle 10g 第 2 版。

【问题讨论】:

    标签: java oracle oracle10g


    【解决方案1】:

    由于您的类型定义了一个构造函数,我不确定这是否会完全正常工作,但我已经在我的博客上发布了有关如何执行此操作的示例。一、如何将记录类型从Java传入Oracle:

    http://betteratoracle.com/posts/31-passing-record-types-between-oracle-and-java

    然后将其扩展为将记录数组从 Java 传递到 Oracle:

    http://betteratoracle.com/posts/32-passing-arrays-of-record-types-between-oracle-and-java

    【讨论】:

    • 传递的记录数组是否等于记录表?请详细说明。
    • 是的,当您将类型定义为“my_type is table of X”时,它实际上是一个数组。要传入表(或数组)或记录,您需要在 Java 中构建一个数组,然后将其转换为 Oracle 内部类型。
    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2019-12-11
    • 2011-01-27
    • 2017-07-28
    • 1970-01-01
    • 2021-03-02
    • 2023-03-04
    相关资源
    最近更新 更多