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);
Partager