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 :
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 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 un extrait du résultat obtenu :
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();
Les number et date s'affichent correctement, cependant les informations concernant les varchar2 sont corrompus ou perdu en chemin.'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' '???' '???'
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.
Partager