如何指定IN参数作为TABLE类型的Oracle数据类型?

Eri*_*ono 5 java oracle oracle10g

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

使用JDBC从存储过程中获取Oracle表类型

答案为我们提供了使用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;
Run Code Online (Sandbox Code Playgroud)

我的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
   )
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*ell 4

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

http://betteracle.com/posts/31-passing-record-types- Between-oracle-and-java

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

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