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 :

Problème Callable Statements


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Par défaut Problème Callable Statements
    Hello

    J'ai un soucis avec des requêtes préformatées dans une base oracle10g, nommée astucieusement servic...

    Dans ma classe de connexion, j'ai le test donnée dans la FAQ pour donner la liste des requêtes préformatées de la connexion, et j'y retrouve une requête tout simple, que j'ai nommé LISTE_EMPLOYE, et que j'ai créer ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create or replace package gestion as
    type cur_empl is ref cursor;
    procedure liste_employe (le_affect in number, ma_liste out cur_empl);
    end;
    Ensuite, je lance
    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
    27
    28
    29
    create or replace package body gestion as
    procedure liste_employe (le_affect in number, ma_liste out cur_empl) as
    rec_service service%rowtype;
    message varchar2(250);
    begin
    set transaction read only;
    if le_affect = 0 then
    open ma_liste for select nuempl, nomempl, hebdo, 
    		(select sum(duree) from travail where nuempl = employe.nuempl) as sumduree,
    		affect, (select nomserv from service where nuserv = affect) as nomaffect
    from employe order by nomempl, 6;
    else
    select * into rec_service from service where nuserv = le_affect;
    open ma_liste for select nuempl, nomempl, hebdo,
    	(select sum(duree) from travail where nuempl = employe.nuempl) as sumduree,
    	affect, (select nomserv from service where nuserv = affect) as nomaffect
    from employe where affect = le_affect order by nomempl;
    end if;
    commit;	
    exception
    when no_data_found then
    	rollback;
    	raise_application_error(-20002,'le service '||le_affect||' n existe pas');
    when others then
    	message := 'sqlcode : '||sqlcode||' '||substr(sqlerrm,1,200);
    	rollback; 	
    	raise_application_error (-20999,'erreur inattendue : '||message);	
    end;
    end;
    Blablabla je définis ma procédure quoi.

    J'ai ensuite testée ma connexion, elle existe. Si je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boolean rs = statement.execute("SELECT * FROM EMPLOYE");
    Et que je m'occupe du resultSet sortant, j'obtiens bien le contenu console de la table.

    Je teste ensuite la callable statement par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CallableStatement ps_select_Employes;
    ps_select_Employes = conn.prepareCall (" { call gestion.LISTE_EMPLOYE(?,?)}"); 
    ps_select_Employes.setInt(1,num); //num est a passer en param dans les arguments de la méthode
    ps_select_Employes.registerOutParameter(2,OracleTypes.CURSOR);
    ps_select_Employes.execute();
    System.out.println("machin a afficher")
    Et le "machin à afficher" n'arrive jamais...

    Je précise que quand je fais le test de la FAQ pour connaitre les différentes procédures stockées, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ######################################
    Nom (procedure) = LISTE_EMPLOYE
    Type = ne renvoie pas de résultat
    Normal, pas normal ?

    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Par défaut
    Bonjour,
    Et le "machin à afficher" n'arrive jamais...
    Tu as une erreur ? Une exception ? Une trace ?
    Que se passe-t-il si tu essaye de récupérer le ResultSet qui représente ton curseur ?
    Normal, pas normal ?
    A priori, normal, après une lecture en diagonale. Si tu t'attendais à avoir un type de retour, il aurait fallu que ta procédure retourne effectivement quelque chose.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  3. #3
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Par défaut
    Ben théoriquement ma_liste est le retour de ma procédure, non, je l'ai mal formatée ma procédure ?

    Sinon non, aucune exception ou autre info. Ca s'arrête même pas, ça continue de tourner, mais ça m'affiche rien. Je suis tjs dessus.

  4. #4
    Membre Expert
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Par défaut
    Bonjour,
    ma_liste est le retour de ma procédure
    Non, une procédure, par définition ne retourne rien. Seules les fonctions retournent quelque chose.
    Ta variable "ma_liste" est simplement un paramètre de type OUT. Ca se ressemble, mais ce n'est pas pareil

    Sinon non, aucune exception ou autre info.
    Tu n'as aucun warning ?

    Quelques autres pistes/questions :
    - Ta procédure fonctionne bien ? Tu l'as testée en dehors de ton programme ? Si oui, comment ?
    - As tu essayé avec une simple procédure, style "HelloWorld" ?
    - L'utilisateur a-t-il le droit d'appeler la procédure ?
    - Le driver est-il assez récent ?
    - Quelles sont les traces (logs) du driver ?

    Sinon, est ce que tu n'aurais pas raté d'autres fichiers de logs (selon le contexte : fichiers de ton serveur web, logs d'une application RCP, ...) ?

    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  5. #5
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Par défaut
    Je suis en train de réinstaller ma base avec les droits sur public, je vous tiens au courant, merci

  6. #6
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Par défaut
    Ca venait effectivement de la base, que j'avais mal installée chez moi en local, alors que sur son serveur original, mon code passe très bien

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Hudson] Problème:cast to hudson.remoting.Callable
    Par benyahia4 dans le forum Intégration Continue
    Réponses: 0
    Dernier message: 04/01/2010, 11h24
  2. Problème avec EXECUTE STATEMENT
    Par freud dans le forum SQL
    Réponses: 2
    Dernier message: 17/01/2009, 19h25
  3. Réponses: 42
    Dernier message: 18/04/2008, 14h44
  4. If statement - Problème
    Par braecking dans le forum Débuter
    Réponses: 1
    Dernier message: 04/03/2008, 17h36
  5. problème avec les statements
    Par samil dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 28/08/2007, 08h21

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