2012-05-04 18 views
5

En base a esta pregunta anterior sobre stackoverflow:¿Cómo especificar el parámetro IN que como tipo de datos Oracle de tipo TABLE?

Fetch Oracle table type from stored procedure using JDBC

La respuesta nos dio una muestra de parámetro OUT utilizando Oracle getArray y java.sql.Datum. Pero, ¿qué sucede si quiero especificar el parámetro IN que tiene el tipo de datos del tipo de 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; 

Y mi SP es la siguiente:

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 
    ) 

en tanto que la XX_PROD_ATTR_TAB_TYPE es una tabla como parámetro IN.

¿Cómo especificar esto en Java? Estoy usando Oracle 10g versión 2.

Respuesta

3

Como su tipo tiene un constructor definido, no estoy seguro si esto funcionará exactamente, pero he publicado muestras sobre cómo hacer esto en mi blog. En primer lugar, la forma de pasar un tipo de registro en Oracle desde Java:

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

, y después los que pase conjuntos de registros en Oracle desde Java:

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

+0

es pasar el conjunto de registros es igual a TABLA de registro? por favor elabora. –

+1

Sí, cuando tiene un tipo definido como "my_type es tabla de X" entonces efectivamente es una matriz. Para pasar una tabla (o matriz) o registros, crea una matriz en Java y luego la convierte en el tipo interno de Oracle. –

+0

¡Ah, tienes razón! ¡Gracias! –

Cuestiones relacionadas