Passer un tableau de structure depuis une fonction PLSQL vers un programme Java
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:
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:
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 :
Citation:
'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.