2015-02-23 1 views
0

Dans Oracle, j'ai des types comme:SQLData avec ressort ne fonctionne pas pour la procédure Oracle SQL avec Oracle complexe type de données

create or replace TYPE    "LOCATION_RECORD" AS OBJECT 
(PSTL_ADR   ADR_TABLE 
,GEO_CDE  VARCHAR2(36) 
,PRMRY_FLG VARCHAR2(5) 
); 

create or replace TYPE "LOCATION_TABLE" AS TABLE OF LOCATION_RECORD; 
create or replace TYPE    "ADR_RECORD" AS OBJECT 
(LN_1_TXT VARCHAR2(100) 
,LN_2_TXT VARCHAR2(100) 
) 

create or replace TYPE "ADR_TABLE" AS TABLE OF ADR_RECORD; 

Procédure:

PROCEDURE Main(P_LOCATION_TABLE  IN  LOCATION_TABLE  
       ,P_OUTPUT   IN  LOCATION_TABLE); 

Comment puis-je appeler cette procédure en java? C'est un cas spécial où une table de type oracle contient une autre table de type oracle . J'avais essayé avec l'implémentation de données SQL. Ça ne fonctionnait pas. Seulement si l'enregistrement de type oracle n'a pas de type de table en tant que l'un de ses paramètres, alors il fonctionne à travers java. MAIS lorsqu'un enregistrement de type oracle a un autre type de table comme paramètre, cela ne fonctionne pas. Comment construire STRUCT tableau type de LOCATION table qui contient également ADR_TABLE? Comment obtenir le paramètre de sortie?

Répondre

0

Tenir compte utiliser Spring Data JDBC Extensions

La classe est pratique pour vous SqlStructArrayValue, où arrayTypeName est votre LOCATION_TABLE, structTypeName - LOCATION_RECORD. Et l'implémentation StructMapper doit remplir correctement un StructDescriptor pour vos valeurs.

À droite, dans ce cas, vous devez utiliser SqlStructArrayValue comme objet imbriqué une fois de plus, car votre PSTL_ADR est également un ARRAY.

Voir le code source de ce projet et les cas de test à partir de là.