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

SQL Procédural MySQL Discussion :

Proc. Stock. 2 appels de PS => 2 résultats différents


Sujet :

SQL Procédural MySQL

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Par défaut Proc. Stock. 2 appels de PS => 2 résultats différents
    Bonsoir à tous,

    j'ai dans ma base de données une Procédure Stockée, dans laquelle je construite une requête dynamiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
      -- debut de requete 
      SET strRequete = 'select count(1) from ma_table'; 
      -- (liste des conditions qui me permettent de construire ma requete 
      --  au fur et a mesure)
     
      -- Lancement de la requete 
      PREPARE stmt1 FROM @strRequete;
      EXECUTE stmt1;
      DEALLOCATE PREPARE stmt1;
    J'appelle ma procédure stockée, 2 fois :
    - la première fois, elle me renvoie comme résultset un nombre "2560" (toujours le même, mais il ne s'agit pas du nombre total de lignes dans ma table, plus important);
    - la seconde fois, il me renvoie le bon nombre (en l'occurence, 660)

    J'ai donc 2 fois le même appel de procédure stockée, et j'ai 2 résultats différents.

    Note : si j'appelle la procédure une 3ème fois, le résultat est toujours correct (660), mais, décidément, le premier appel, ça ne passe pas correctement.


    Quelqu'un a t'il déjà été confronté au même problème ?

    cdlt,

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    - la première fois, elle me renvoie comme résultset un nombre "2560" (toujours le même, mais il ne s'agit pas du nombre total de lignes dans ma table, plus important);
    la première fois depuis quoi ? as-tu pu reproduire le bug ?

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Par défaut
    La première fois que j'appelle la procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    call maProcStock( (... liste de paramètres) );
    -- le resultat affiche sera 2560 
     
    call maProcStock( (... liste de paramètres) );
    -- le resultat affiche sera bon, 660

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Par défaut
    Je précise au passage que j'ai vérifié les requêtes qui sont générées avant d'être exécutées : ce sont exactement les mêmes.

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    que veut dire "la première fois" ? la première fois à chaque ouverture de session ? à chaque redémarrage du serveur ? à chaque fois que tu lances la procédure deux fois de suite ?

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Par défaut
    La premiere fois que j'appelle la procédure stockee (??)
    Je ne m'occupe pas du redemarrage du serveur ou de la session : la base de donnees tourne sur un autre poste.

    Pour etre un peu plus precis, j'utilise un outil interne de l'IDE IntelliJ d'IDEA pour lancer mes requetes. J'ai aussi MySQL Browser 1.2.8. J'utilise la meme bibliotheque (mysql-connector-java-5.0.4-bin.jar, que j'ai recupere sous "\MySQL GUI Tools 5.0\java\lib") pour executer des requetes dans la base de donnees.

    Donc dans le browser SQL d'Intellij IDEA, je peux ouvrir plusieurs fenetres, et dans chaque fenetre je peux ecrire des requetes SQL et les executer.
    C'est dans ce cas, ou je lance 2-3 requetes (dont les 2 appels de procedures stockees), que je trouve le bug : le 1er appel de PS donne un resultat incoherent et faux, le 2sd est correct et bon (le 3ème est bon, etc).


    Et je suis tombe sur un os supplementaire :
    - j'ai teste avec une requete beaucoup plus simple (compter le nombre de lignes dans une table ou recuperer la liste des donnees dans une petite table).
    - J'ai alors le meme probleme que precedemment : le 1er appel (sous le browser de l'IDE Intellij IDEA) donne un resultat faux, a partir du 2sd appel de procedure stocke c'est bon.

    - par contre, quand j'appelle cette meme procedure sous MySQL Browser, aucun probleme ! Le résultat est tout à fait cohérent et c'est bien le résultat attendu.

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    certains requêteurs, comme MySQL Query Browser, ouvent et ferment une session à chaque fois qu'ils lancent une requête ou paquet de requêtes...

    Je vois donc deux hypothèses :
    - soit ta "première fois" est une "première fois" par session (ce que tu peux vérifier avec le client texte), par exemple parce que tu modifies une variable système dans ta procstock ; si Intellij IDEA et QB fonctionnent sur ce même principe, tu retrouves le même bug dans les deux

    - soit c'est un pb lié à Intellij IDEA, non reproductible sous QB ou le client texte, et MySQL n'y est pour rien

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Par défaut Erreur identifiée
    J'ai trouvé l'erreur . Il est lié au Browser SQL de l'IDE IntelliJ IDEA.

    Quand on met un champ de commentaires avant l'appel d'une procédure stockée, ça la fait planter, ou donner un résultat incohérent.

    Par contre, quand on ouvre une fenêtre où on appelle la procédure stockée (donc sans commentaires AVANT cet appel : "-- ceci est un commentaire"), aucun problème.

    Apparemment pas de soucis si l'on met des commentaires après l'appel (encore heureux).

    Mais quid de la cause de ce bug ??


    Merci de m'avoir répondu et d'avoir essayé ce creuser le problème, qui fut épineux.

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

Discussions similaires

  1. Proc stockée qui appelle deux proc stockées et quelques scripts
    Par khalid76 dans le forum Développement
    Réponses: 0
    Dernier message: 07/11/2012, 18h46
  2. Appels de procedures stockées dans une proc stockée ?
    Par Nadaa dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 17/07/2008, 10h32
  3. appel de proc stock dans shells unix
    Par fguigui dans le forum Oracle
    Réponses: 20
    Dernier message: 05/04/2007, 14h05
  4. Réponses: 2
    Dernier message: 16/02/2007, 18h49
  5. Appel de proc stockée ORACLE renvoyant un curseur à partir de DELPHI
    Par orphee13 dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/09/2006, 14h05

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