Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/02/2008, 16h37   #1
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 55
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 55
Points : 33
Points : 33
Par défaut [JDBC][9i] Impossible de lire un tableau dans le PL/SQL...

Bonjour à tous !

Ca va faire bientôt deux journées que je tourne en rond sur ce pb et je commence naturellement à en avoir marre !
Je n'arrive pas à accéder aux éléments d'une liste passée en paramètre à une procédure stockée !!!

J'aimerais tout bêtement passer un tableau de String à une procédure stockée dans Oracle. Le tableau n'aura pas tout le temps la même longueur, donc j'ai créé un type nested table sur toute la base :
Code :
CREATE OR REPLACE TYPE STRINGARRAY2 IS TABLE OF VARCHAR(64);
Jusque là OK.

Voici la partie PL/SQL :
- le header du package en question :
Code :
PROCEDURE maProc	(colEquip IN STRINGARRAY2);
- le body :
Code :
1
2
3
4
5
6
7
PROCEDURE maProc	(colEquip IN STRINGARRAY2) IS
BEGIN
Pck_Utilitaire.ado_Add_Erreur('ii',colEquip.COUNT||'-- '
||colEquip(colEquip.FIRST)||' --'||colEquip.FIRST||'--'
||colEquip.LAST,NULL,ERR_TRAITEMENT);
COMMIT;
END;
La procédure ado_Add_Erreur ne fait qu'écrire dans une table.

J'utilise Java et JDBC pour me connecter à Oracle. Voici la partie Java :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 /*j'initialise tout bien avant avec les classes Oracle et pas les génériques*/
String[] equip=new String[4];
equip[0]="coucou";
equip[1]="coicoi";
equip[2]="coacoa";
equip[3]="coecoe";
oracle.sql.ArrayDescriptor descriptor = oracle.sql.ArrayDescriptor.createDescriptor("STRINGARRAY2", con);
oracle.sql.ARRAY array = new ARRAY (descriptor, con, equip);
 
String sql="{call MON_SCHEMA.MON_PACKAGE.maProc(?)}";	
OracleCallableStatement  req=(OracleCallableStatement) con.prepareCall(sql);
req.setArray(1, array);
req.execute();
La procédure s'exécute correctement, mais voila ce que je trouve dans la table : En bref je n'arrive pas à accéder aux éléments de ma liste... J'ai essayé de boucler sur la liste, je n'arrive à accéder à aucun élément.
J'ai aussi testé en 8i et le comportement est le même...

J'ai loupé une étape dans l'initialisation ?
Vous voyez un problème quelque part ?

J'espère que j'ai été clair !
Merci d'avance !
scougirou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2008, 16h53   #2
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 55
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 55
Points : 33
Points : 33
Bon, j'ai testé avec un tableau d'entiers à la place d'un tableau de strings, et ça passe sans soucis... Je suis un peu paumé, si quelqu'un a une idée !...
scougirou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2008, 17h20   #3
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 55
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 55
Points : 33
Points : 33
Bon, c'était un problème d'encodage.
Mon java sort de l'UTF8... J'ai changé VARCHAR2 en NVARCHAR2 et ça passe.
scougirou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h35.


 
 
 
 
Partenaires

Hébergement Web