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 :
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 :
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
Partager