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 :

resultat procedure non espéré


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Par défaut resultat procedure non espéré
    Bonjour,

    J'ai acheté un livre a partir duquel j'essaye de faire un exercice, mais cela ne semble pas fonctionner.

    Ma table et la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    brevet 	    nom 		nbHVol 	compa 	chefPil
    PL-1 	   Pierre Lamothe 	450.00 	AF 	PL-4
    PL-2 	   Didier Linxe 	900.00 	AF 	PL-4
    PL-3 	   Christian Soutou 	1000.00 SING    NULL

    Ensuite je crée un procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    delimiter $
    SET @vs_nom = 'Pierre Lamothe'$
    DROP PROCEDURE IF EXISTS sp1$
    CREATE PROCEDURE sp1()
    BEGIN 
    	DECLARE v_nbHVol DECIMAL(7,2);
    	SELECT nbHVol INTO v_nbHVol FROM Pilote WHERE nom = @vs_nom;
    	SELECT v_nbHVol;
    END;
    $

    Après je l'appel via :
    Mais cela me renvoie NULL comme résultat, alors que a priori cela devrait être 450.00 ???

    Résultat :

    Voyez-vous où se trouve l'erreur svp ?

    Merci beaucoip opur votre aide

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Par défaut
    Petit précision, je fait mes test sur phpmyadmin

    En enlevant la variable de session "SET @vs_nom = 'Pierre Lamothe'$" avant ma procédure en plaçant directement la valeur 'Pierre Lamothe' dans ma procédure comme suit cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    delimiter $
    DROP PROCEDURE IF EXISTS sp1$
    CREATE PROCEDURE sp1()
    BEGIN 
    	DECLARE v_nbHVol DECIMAL(7,2);
    	SELECT nbHVol INTO v_nbHVol FROM Pilote WHERE nom = 'Pierre Lamothe';
    	SELECT v_nbHVol;
    END;
    $
    Résultat :

    v_nbHVol
    450.00

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Je ne suis pas habitué aux procédures sous MySQL mais je pense avoir trouvé la cause de ton erreur.

    Les instructions SQL se terminent par un point-virgule.
    L'instruction DELIMITER $ signifie : "Exécute tout jusqu'au prochain $."
    Comme tu as mis un $ à la fin de la première ligne définissant la variable @vs_nom, la procédure s'arrête et ne renvoie rien.

    À mon avis, il faut plutôt faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    delimiter $
    SET @vs_nom = 'Pierre Lamothe';
    DROP PROCEDURE IF EXISTS sp;
    CREATE PROCEDURE sp1()
    BEGIN 
    	DECLARE v_nbHVol DECIMAL(7,2);
    	SELECT nbHVol INTO v_nbHVol FROM Pilote WHERE nom = @vs_nom;
    	SELECT v_nbHVol;
    END;
    $
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Par défaut
    Cela fonctionne merci beaucoup
    Par contre je ne comprend pas via phpmyadmin j'ai des erreurs:

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; CREATE PROCEDURE sp1() BEGIN DECLARE v_nbHVol DECIMAL(7,2); SELECT nb' at line 1
    Alors que je passe en ligne de commande via une "fenêtre dos", cela marche...

    Quelque chose m'échappe, j'ai l'impression que phpmyadmin bug avec le delimiter


    http://www.developpez.net/forums/d11...e/#post6505732

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

Discussions similaires

  1. resultat formulaire non renvoyés vers boite mail
    Par fantomas261 dans le forum Langage
    Réponses: 1
    Dernier message: 22/09/2010, 11h46
  2. resultat grep non attendu
    Par nina2007 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 19/07/2010, 12h13
  3. [VB6-OOo]createUnoService => type ou procedure non définie
    Par shaftJackson dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 09/02/2007, 14h31
  4. Appel de procedure non souhaité
    Par DURVILLE dans le forum Delphi
    Réponses: 2
    Dernier message: 24/09/2006, 16h19

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