GTMistral | Bonjour,
Je suis nouveau dans le monde des procédures stockées. Je travail présentement sur un travail en Java avec JDBC/Oracle.
J'ai fait une fonction retournant (normalement) un ResultSet contenant le "SELECT *" et sur mon prepareCall, je ne passe pas un ResultSet.FORWARD-ONLY, ce qui devrait pouvoir me permettre d'aller en avant comme en arrière dans mon ResultSet. Pourtant, ça plante à la moindre occasion (isLast, isFirst, next, previous). Bon, en fait je ne sais pas si c'est un problème Java ou PL/SQL. Mais voici tout de même le code de ma fonction dans son package.
Code :
- CREATE OR REPLACE PACKAGE Carnet IS
- TYPE Calepin IS REF CURSOR RETURN carnet2%ROWTYPE;
- FUNCTION selectCarnet (vNom VARCHAR2) RETURN Calepin;
- [...]
- END;
- /
- CREATE OR REPLACE PACKAGE BODY Carnet IS
- --
- -- select
- --
- FUNCTION selectCarnet (vNom VARCHAR2) RETURN Calepin IS
- AdBook Calepin;
- BEGIN
- OPEN AdBook FOR SELECT NoCarnet, Nom, Prenom, Adresse, Ville, CodePostal, Province, Courriel, Telephone, Telecopieur, Photo FROM carnet2 WHERE Nom LIKE vNom||'%' ORDER BY Nom;
- RETURN AdBook;
- END selectCarnet;
- [...]
- END;
- /
- SHOW ERRORS;
- /
|
Est-ce que quelqu'un voit pourquoi mon curseur serait "forward-only"?
Au cas où voici le code qui fait appel au SELECT :
Code :
- public ResultSet requeteCarnet (Connection connexion, String nom)
- {
- try
- {
- CallableStatement cs = connexion.prepareCall("{?=call Carnet.selectCarnet(?)}", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
- cs.registerOutParameter(1, OracleTypes.CURSOR);
- cs.setString(2, nom);
- cs.execute();
- ResultSet rs = (ResultSet)cs.getObject(1);
- if (rs.next())
- {
- System.out.println("ResultSet plein!" );
- message = "Enregistrement trouvé!";
- return rs;
- }
- else
- {
- System.out.println("ResultSet vide..." );
- message = "Il n'y aucune enregistrement à ce nom";
- return null; //retourne rien
- }
- }
- catch (SQLException sqlex)
- {
- sqlex.printStackTrace();
- System.out.println("pas de données" );
- return null;
- }
- }
- /* ==================================== */
- public ResultSet enregistrementSuivantCarnet (ResultSet rset)
- {
- try
- {
- message = "";
- if (!rset.isLast())
- {
- rset.next();
- if (rset.isLast())//pour ne pas être nowhere
- {
- message = "Nous sommes à la fin";
- }
- }
- else
- {
- message = "Nous sommes à la fin";
- }
- return rset;
- }
- catch (SQLException sqlex)
- {
- //System.out.println("Numéro d'erreur SQL : " + sqlex.getErrorCode());
- //System.out.println("SQL Statement : " + sqlex.getSQLState());
- sqlex.printStackTrace();
- message = "Problème grave de recherche";
- return null;
- }
- catch (Exception ex)
- {
- message = "Erreur innatendue et inconnue";
- ex.printStackTrace();
- return null;
- }
- }
|
Merci à quiconque peut m'aider! |