5

stackoverflow に関するこの前の質問に基づいて:

JDBC を使用してストアド プロシージャから Oracle テーブル タイプを取得する

その答えは、Oracle getArray と java.sql.Datum を使用した OUT パラメータのサンプルです。しかし、IN パラメータに Oracle TABLE 型のデータ型を指定したい場合はどうすればよいでしょうか。

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 を使用しています。

4

1 に答える 1

3

あなたの型にはコンストラクターが定義されているので、これが正確に機能するかどうかはわかりませんが、これを行う方法のサンプルを私のブログに投稿しました。まず、レコード タイプを 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

于 2012-05-04T14:13:07.930 に答える