IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[java/oracle] procedures (PL/SQL) et Resulset


Sujet :

JDBC Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 41
    Par défaut [java/oracle] procedures (PL/SQL) et Resulset
    Bonjour,

    alors voilà, dans mon projet de BDD, il est imposé d'utiliser des procédures et fonctions ecrites en PL/SQL au lieu de directement ecrire la requete dans la programme java.

    Le probleme c'est qu'avec la procédure que j'ai créée sous oracle, le ResultSet est toujours vide... je ne sais pas si c'est mon programme ou ma procédure qui est mal ecrit :


    la procédure doit SIMPLEMENT AFFICHER LE RESULTAT DE LA REQUETE en affectant les variables données en parametre. Je précise que la requete seule fonctionne très bien, et que si j'execute la procedure dans Oracle, les résultats s'affichent... :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    CREATE OR REPLACE PROCEDURE Cherche_Exp_Dispo(nomFilm ens2004.FILM.Titre%TYPE) IS
     
    CURSOR Curseur IS
     
    SELECT NumExemplaire 
    FROM ens2004.EXEMPLAIRE E, ens2004.FILM F 
    WHERE E.NumFilm = F.NumFilm 
    AND Titre=nomFilm
    AND E.NumExemplaire 
    NOT IN (SELECT NumExemplaire 
    	   FROM LOCATION 
    	   WHERE DateEnvoi IS NOT NULL 
    	   AND DateRetour IS NULL 
             AND TitreFilm=nomFilm);
     
    numExp ens2004.EXEMPLAIRE.NumExemplaire%TYPE;
    BEGIN
    	OPEN Curseur;
    	LOOP 
    		FETCH Curseur INTO numExp;
    		EXIT WHEN (Curseur%NOTFOUND);
    		DBMS_OUTPUT.PUT_LINE(numExp || ' ');
    	END LOOP;
    	CLOSE Curseur;
    END;
    /

    et voilà la partie java :

    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
    16
    17
    18
    19
    20
    CallableStatement cs = co.prepareCall("{call Cherche_Exp_Dispo(?)}");
    cs.setString(1, NomFilm);
    cs.execute();
    ResultSet rs = cs.getResultSet();
     
     
    // Si le resultSet contient au moins un résultat (un exemplaire libre)
    // on note le premier exemplaire de libre
    if(rs.next()){
    	ExpLibre=rs.getString(1);
    }
     
    // Sinon on refuse la location et on affiche pourquoi
    else {
    	JOptionPane.showMessageDialog(this, "Pas d'exemplaire disponible");
    	locationPossible=false;
    }	
     
    cs.close();
    rs.close();

    Déjà je pense que ma procédure n'est pas bonne car j'ai trouvé une procédure sous My SQL de ce genre, qui permet juste d'afficher le resultat de la requete, mais sous Oracle on ne peut pas ecrire une procedure comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE PROCEDURE Cherche_Exp_Dispo(nomFilm ens2004.FILM.Titre%TYPE) AS
     
    SELECT NumExemplaire 
    FROM ens2004.EXEMPLAIRE E, ens2004.FILM F 
    WHERE E.NumFilm = F.NumFilm 
    AND Titre=nomFilm
    AND E.NumExemplaire 
    NOT IN (SELECT NumExemplaire 
    	   FROM LOCATION 
    	   WHERE DateEnvoi IS NOT NULL 
    	   AND DateRetour IS NULL 
             AND TitreFilm=nomFilm);

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    salut, je ne sais pas si cela marchera mieux mais au niveau java teste ca :
    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
    16
     
    CallableStatement cs = co.prepareCall("{call Cherche_Exp_Dispo(?)}");
    // tu défini le type de ton retour, je ne connais pa le tien, alors j'ai mis int
    cs.registerOutParameter(1, java.sql.Types.Integer);
    cs.setString(1, NomFilm);
    cs.execute();
    ResultSet rs = cs.getResultSet();
    if(rs.next()){
    	ExpLibre=rs.getString(1);
    } else {
    	JOptionPane.showMessageDialog(this, "Pas d'exemplaire disponible");
    	locationPossible=false;
    }	
     
    cs.close();
    rs.close();

Discussions similaires

  1. Réponses: 20
    Dernier message: 06/08/2013, 23h15
  2. Passer un tableau de JAVA vers Procedure PL/SQL
    Par libuma dans le forum JDBC
    Réponses: 1
    Dernier message: 11/03/2010, 11h14
  3. Appel d'un programme JAVA depuis une procedure PL/SQL
    Par farenheiit dans le forum PL/SQL
    Réponses: 8
    Dernier message: 04/03/2008, 11h03
  4. [Oracle 10] Appel SQL*Loader depuis Java
    Par ftrifiro dans le forum Oracle
    Réponses: 4
    Dernier message: 23/01/2007, 10h34
  5. Réponses: 3
    Dernier message: 31/07/2006, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo