Bonsoir,


Je suis en train de créer une application faisant interagir mon appli Java avec une base Oracle. J'ai créé une fonction PL/SQL est censé me renvoyer un tableau de données.

Cependant, j'ai besoin d'un tableau de 4 colonnes. La première contient des données de type NUMBER et les 3 autres sont de type VARCHAR2.
J'ai donc créé un type objet contenant ces 4 attributs. Ensuite, j'ai créé un nouveau type, qui cette fois, est un tableau de mon type précédemment créé.

Jusque là vous me suivez?

Bon, j'ai ensuite ma fonction PL/SQL qui fait son boulot et qui me renvoie un résultat de type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
nomUser.monType1(nomUser.monType1(ma_premiere_ligne_resultat), nomUser.monType1(ma_deuxieme_ligne_resultat))
C'est ce que mon sql developer me donne lorsque j'exécute ma fonction stockée.


Maintenant, passons à Java.


J'ai une fonction qui fais un CallableStatement pour appeler ma fonction PL/SQL. Mon soucis est que je n'arrive pas à récupérer (dans un format réutilisable par Java) mon Array renvoyé.

Voici le bout en question :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
// Permettre d'executer une fonction stockée
CallableStatement cst = co.prepareCall("{? = call maFonction(?) }");
 
// Formater le futur paramètre au format SQL
co.nativeSQL(nomParametre);
 
// Ajouter le paramètre au callableStatement		
cst.setString(2, nomParametre);
 
// Définir le type de la valeur retournée
cst.registerOutParameter(1, Types.ARRAY, "MON_TYPE_TABLE");
 
// Executer la requete
cst.executeQuery();
 
// Récupération du résultat
Array arrayResultat = cst.getArray(1);
 
// Copier l'array contenant les valeurs résultat dans le tableau qu'on va renvoyer
String tab = arrayResultat.getArray().toString();

Voila. J'ai essayé diverses types dans le registerOutParameter mais rien à faire.

NB : J'ai déjà utilisé cette méthode en ayant un tableau SQL d'une colonne de type VARCHAR2 et là je n'ai aucun problèmes.


Merci pour votre aide