Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/01/2007, 18h47   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2003
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 46
Points : 14
Points : 14
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 :
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,
Péchereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2007, 19h26   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
- 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 ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 10h10   #3
Candidat au titre de Membre du Club
 
Inscription : mai 2003
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 46
Points : 14
Points : 14
La première fois que j'appelle la procédure stockée :

Code :
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
Péchereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 10h12   #4
Candidat au titre de Membre du Club
 
Inscription : mai 2003
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 46
Points : 14
Points : 14
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.
Péchereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 13h01   #5
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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 ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 14h05   #6
Candidat au titre de Membre du Club
 
Inscription : mai 2003
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 46
Points : 14
Points : 14
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.
Péchereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 04h33   #7
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2007, 19h01   #8
Candidat au titre de Membre du Club
 
Inscription : mai 2003
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 46
Points : 14
Points : 14
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.
Péchereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h49.


 
 
 
 
Partenaires

Hébergement Web