[RESOLU]Erreur SQL : ORA-01008: Toutes les variables ne sont pas liées

Erreur SQL : ORA-01008: Toutes les variables ne sont pas liées [RESOLU] - Java - Programmation

Marsh Posté le 05-12-2006 à 15:27:35    

J'ai un gros problème urgent consernant l'execution d'une procédure depuis SQL.
 
J'ai ouvert ma connexion, et j'ai donc le code suivant pour executer ma procédure :
 

Code :
  1. //Connexion déclaré en variable global cnx.
  2. public void execproc(String TF, String CS, String DS, String VO){
  3.  try {
  4.   CallableStatement proc = cnx.prepareCall("{ ? = call ajout_explr(?,?,?,?) }" );
  5.   proc.setString(1,TF);
  6.   proc.setString(2,CS);
  7.   proc.setString(3,DS);
  8.   proc.setString(4,VO);
  9.   proc.execute();
  10.  }
  11.  catch(SQLException e) {
  12.   String error = e.toString();
  13.   System.out.println("Erreur sur le traitement de la procedure : " + error);
  14.   }
  15. }


 
L'erreur SQL qui revient est donc : "ORA-01008: Toutes les variables ne sont pas liées".
 
La procédure a été testé sur oracle et marche très bien :
 

Code :
  1. CREATE OR REPLACE PROCEDURE ajout_explr(tf string, cs string, ds string, voex string) IS
  2. nf integer;
  3. maxne integer;
  4. maxnf integer;
  5. BEGIN
  6. select MAX(numExemplaire)+1 into maxne FROM Exemplaire;
  7. nf := verif_film_existe(tf);
  8. IF (nf=-1) THEN
  9.  select MAX(numfilm)+1 into maxnf FROM film;
  10.  INSERT INTO film(numfilm,titre) VALUES (maxnf,tf);
  11.  DBMS_output.put_line('Film ajouté dans la base');
  12.  SELECT numfilm into nf
  13.  FROM film
  14.  WHERE Titre=tf;
  15. END IF;
  16. INSERT INTO exemplaire(NumExemplaire,NumFilm,CodeSupport,DetailSupport,VO)
  17. VALUES(maxne,nf,cs,ds,voex);
  18. END ajout_explr;
  19. /


 
Merci d'avance pour vos réponses, je suis vraiment bloqué et c'est assez chiant :(


Message édité par Mric78 le 06-12-2006 à 14:43:49
Reply

Marsh Posté le 05-12-2006 à 15:27:35   

Reply

Marsh Posté le 05-12-2006 à 16:07:49    

5 points d'interrogation, 4 variables assignées, c'est pas ça le problème ? :o
D'ailleurs c'est exactement ce que veut dire le message à priori.


Message édité par Chaos Intestinal le 05-12-2006 à 16:08:26
Reply

Marsh Posté le 05-12-2006 à 18:28:18    

Je ne savais pas que le 1er était une variable, mais soit ... même quand j'enleve le "?=" j'ai toujours la même erreur.

Reply

Marsh Posté le 05-12-2006 à 20:27:46    

Juste pour faire avancer le truc :
 
1. Ta procédure est-elle dans un paquetage ? Si oui, la spécification de ta procédure possède-t-elle bien 4 paramètres ?
 
2. Les paramètres sont-ils non nuls ? (Je ne suis pas sûr que ça ait un impact)

Reply

Marsh Posté le 05-12-2006 à 20:30:31    

Ma procédure n'est dans aucun paquetage.
 
Aucun paramètre n'est nul (du moins en la testant, je les ai toujours rempli), je testerai plus tard si ca change quelque chose, même si je ne pense pas car c'est tout simplement une chaine vide dans ce cas.

Reply

Marsh Posté le 05-12-2006 à 23:56:43    

Le premier paramètre est un paramètre de sortie.
proc.registerOutParameter(1,Types.VARCHAR);
proc.setString(2,TF);
proc.setString(3,CS);
proc.setString(4,DS);
proc.setString(5,VO);
 
System.out.println(proc.getString(1));


Message édité par lonely le 06-12-2006 à 00:04:14
Reply

Marsh Posté le 06-12-2006 à 13:16:33    

Si j'ai bien compris, ca me donne ca :
 
CallableStatement proc = cnx.prepareCall("{? = call ajout_explr(?,?,?,?) }" );
   proc.registerOutParameter(1,Types.VARCHAR);  
   proc.setString(2,TF);
   proc.setString(3,CS);
   proc.setString(4,DS);
   proc.setString(5,VO);
   System.out.println(proc.getString(1));
   proc.execute();
 
Mais le System.out.println(proc.getString(1)); doit sortir quoi ?
Il me fait une erreur :
Index de colonne non valide.
 

Reply

Marsh Posté le 06-12-2006 à 14:43:32    

Problème résolu.
Il ne falait pas que SQL!Plus soit lancé en même temps que mon programme. Erreur toute bête.
 
Merci pour votre aide.

Reply

Marsh Posté le 06-12-2006 à 14:55:39    

:heink:
 
Si SQL+ tourne en même temps que ton prog, ça plante ? :heink:
 
Depuis quand Oracle fait des produits mono-session-mono-poste-mono-utilisateur :??:

Reply

Marsh Posté le 06-12-2006 à 15:34:18    

est-ce que tu es sûr que ton call retourne un seul résultat ? sinon, faut passer par un executeQuery, et récupérer un resultSet sur le quel itérer.
 
ton code ne doit marcher que si tu as un seul résultat.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 06-12-2006 à 15:34:18   

Reply

Marsh Posté le 06-12-2006 à 17:45:27    

En fait les requetes de base marche si SQL+ est lancé, mais pas les appels de procédure.
 
Mon call ne retourne rien, mais j'avais tout essayé pour voir si ca marchais, j'ai donc un call tout simple maintenant avec mes 4 paramètres.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed