Ma fonction PL/SQL doit retourner un tableau de structure, que je récupère dans mon programme java.

Les types crées pour l’occasion sont les suivants :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
TYPE t_ligne_livraison AS OBJECT (
 index_f number,
 num_piece number,
 d_debliv date,
 d_finliv date,
 ty_piece varchar2(3),
 mag  varchar2(3)
);
 
TYPE t_table_livraison AS TABLE OF t_ligne_livraison;
Voici mon code Java pour appeler la fonction, récupérer et afficher le résultat :

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
String sqlProcedure = "{? = call EMC2.pk_report_date_livraison.selectionnerModele(?)}";
CallableStatement instruction = connex.prepareCall(sqlProcedure);
instruction.registerOutParameter(1, OracleTypes.ARRAY, "EMC2.T_TABLE_LIVRAISON");
instruction.setString(2, p_modele);
instruction.execute();
ARRAY resultArray = (ARRAY)instruction.getArray(1);
Object[] resultStructArray = (Object[])resultArray.getArray();
for (int i = 0; i < resultArray.length(); i++)
{
	STRUCT resultElement = (STRUCT)resultStructArray[i];
	for (int j = 0; j < 6; j++)
		System.out.print("'"+resultElement.getAttributes()[j]+"' ");
	System.out.println("");
}
instruction.close();
Voici un extrait du résultat obtenu :

'2006' '202' '2007-01-22 00:00:00.0' '2007-04-30 00:00:00.0' '???' '???'
'2006' '416' '2007-03-01 00:00:00.0' '2007-03-31 00:00:00.0' '???' '???'
'2006' '380' '2007-01-22 00:00:00.0' '2007-04-30 00:00:00.0' '???' '???'
Les number et date s'affichent correctement, cependant les informations concernant les varchar2 sont corrompus ou perdu en chemin.

Je ne détaille pas la fonction PL/SQL, le problème ne vient pas de là mais du coté de Java, puisque quand j'appelle ma fonction dans SQL Plus le tableau s'affiche correctement.