Partage
  • Partager sur Facebook
  • Partager sur Twitter

utilisé plusieurs variables dans une procedure stockée

selection des variables créées

Sujet résolu
    31 août 2011 à 12:51:40

    Bonjour a tous
    Je n'arrive pas a selectionner les deux variables dans cette prodédure stockées.
    DELIMITER |
    CREATE PROCEDURE test (IN ville VARCHAR(100))
    BEGIN
        DECLARE latitude FLOAT(8,6);
        DECLARE longitude FLOAT(7,6);
        SET latitude = (SELECT latitude FROM maps_ville2 WHERE nom = ville);
        SET longitude = (SELECT longitude FROM maps_ville2 WHERE nom = ville);
        SELECT @latitude, @longitude;
    END |
    


    Lorsque j'appelle la procédure
    CALL test('amareins');
    

    je recupere bien la valeur de @latitude mais @longitude me retourne NUll et je ne vois pas trop trop pourquoi, il y a bien une valeur dans le champ longitude de la ville concernée.
    Merci d'avance pour l'aide

    • Partager sur Facebook
    • Partager sur Twitter
      31 août 2011 à 13:58:12

      1. Tu as 2 variables FLOAT de taille différentes, est-ce que tes champs float pour latitude et longitude ont les mêmes dimensions que ces variables ?

      2. Est-ce que la valeur du champ longitude vaut 0 ?
      • Partager sur Facebook
      • Partager sur Twitter
        31 août 2011 à 15:56:21

        slt guk92
        oui les 2 float sont différents, je les déclare tels qu'ils sont dans la structure de la table de la bdd.
        Et la valeur du champ longitude est différent de zero, par contre la valeur par defaut des champs longitude et latitude est NULL, mais j'ai verifié la longitude est bien défini dans la table
        • Partager sur Facebook
        • Partager sur Twitter
          31 août 2011 à 16:03:23

          Va dans la console SQL de MySQL (ou l'onglet SQL de MySQL) et dis nous ce que tu récupères avec la requête suivante :

          SELECT longitude FROM maps_ville2 WHERE nom = 'amareins'
          


          Si tu récupères NULL, c'est bien qu'il y a un problème avec ce champ...
          • Partager sur Facebook
          • Partager sur Twitter
            31 août 2011 à 16:05:09

            oui je l'ai fait et ca me renvoie bien la longitude!
            • Partager sur Facebook
            • Partager sur Twitter
              31 août 2011 à 16:15:08

              Ah, je pense avoir trouvé.

              Lorsque tu déclares, initialise et sélectionne une variable, tu dois utiliser le caractère @ (arobase).

              Source : http://dev.mysql.com/doc/refman/5.0/fr/variables.html


              Donc :
              DECLARE @variable ...
              SET @variable ...
              SELECT @variable ...
              

              • Partager sur Facebook
              • Partager sur Twitter
                31 août 2011 à 16:22:51

                arf, je viens de tester comme ca
                SET latitude = @(SELECT latitude FROM maps_ville2 WHERE nom = ville);
                

                et comme ca
                SET latitude := @(SELECT latitude FROM maps_ville2 WHERE nom = ville);
                

                mais les deux fois ca me renvoie 'erreur de syntaxe'!
                • Partager sur Facebook
                • Partager sur Twitter
                  31 août 2011 à 16:28:36

                  Essaye ceci dans un premier temps :

                  DELIMITER |
                  CREATE PROCEDURE test (IN ville VARCHAR(100))
                  BEGIN
                      DECLARE @latitude FLOAT(8,6);
                      DECLARE @longitude FLOAT(7,6);
                      SET @latitude = (SELECT latitude FROM maps_ville2 WHERE nom = ville);
                      SET @longitude = (SELECT longitude FROM maps_ville2 WHERE nom = ville);
                      SELECT @latitude, @longitude;
                  END |
                  


                  Puis :
                  DELIMITER |
                  CREATE PROCEDURE test (IN @ville VARCHAR(100))
                  BEGIN
                      DECLARE @latitude FLOAT(8,6);
                      DECLARE @longitude FLOAT(7,6);
                      SET @latitude = (SELECT latitude FROM maps_ville2 WHERE nom = @ville);
                      SET @longitude = (SELECT longitude FROM maps_ville2 WHERE nom = @ville);
                      SELECT @latitude, @longitude;
                  END |
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 août 2011 à 16:37:41

                    les deux renvoient erreur de syntaxe et en fait j'ai testé auparavant la sélection de variable dans une procédure stockée et je crois que c'est bien la syntaxe que j'utilise qu'il faut utiliser... mais bon la je suis sur le tuto des procédures stockées, je vais reprendre tout au début en testant au fur et a mesure, parceque la ca me laisse perplexe ce truc ^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 août 2011 à 17:39:39

                      CREATE PROCEDURE test (IN ville VARCHAR(100), OUT latitude FLOAT(8,6), OUT longitude FLOAT(7,6))
                      BEGIN
                          SELECT (SELECT latitude FROM maps_ville2 WHERE nom = ville) INTO latitude;
                          SELECT (SELECT longitude FROM maps_ville2 WHERE nom = ville) INTO longitude;
                         
                      END;
                      
                      
                      SET @lati:=0.0;
                      SET @longi:=0.0;
                      
                      CALL test ('amareins', @lati, @longi);
                      
                      SELECT @latitude, @longitude;
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 août 2011 à 17:51:42

                        yo ouais mais la tu utilises des variables a l'exterieur de la procedure stockée...
                        En fait tu fais deux requetes a la bdd..., arf plus les set ^^!
                        Et si la requête est plus complexe, ce qui va etre le cas puisque j'essaie de récupérer les villes 'dans un rayon de' ca fait un paquet de requête, c'est pour ca que j'essaie de tout caser dans une procédure, même résultat mais avec une seule requete, enfin si j'arrive a le faire^^
                        • Partager sur Facebook
                        • Partager sur Twitter
                          31 août 2011 à 18:14:55

                          Citation : Kail-Ra


                          ca fait un paquet de requête, c'est pour ca que j'essaie de tout caser dans une procédure, même résultat mais avec une seule requete



                          Je maitrise peu les procédures stockées sous MySQL, par contre je peux t'affirmer une chose, c'est qu'une procédure ne te permettra pas de faire moins de requête.


                          Je ne sais pas si ceci fonctionne :

                          CREATE PROCEDURE test (IN ville VARCHAR(100), OUT lat FLOAT(8,6), OUT long FLOAT(7,6))
                          BEGIN
                          
                          SELECT long:=longitude, lat:=latitude FROM maps_ville2 WHERE nom = ville;
                             
                          END;
                          
                          
                          SET @lati:=0.0;
                          SET @longi:=0.0;
                          
                          CALL test ('amareins', @lati, @longi);
                          
                          SELECT @latitude, @longitude;
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            31 août 2011 à 18:26:39

                            pff^^ nan, ca veut pas!!! erreur de syntaxe lors de la création de la procédure, j'ai essayé en remplaçant le 'longfloat' par double, mais c'est la mếme!
                            plein les.... je me rends pour aujourd'hui^^
                            En tous cas vraiment merci pour ton aide, je fais un break ou je vais peter du pc^^ bonne soirée amigo
                            • Partager sur Facebook
                            • Partager sur Twitter
                              3 septembre 2011 à 7:03:33

                              @guk
                              Je viens de relire mon dernier post, il était temps que je fasse un break ^^!
                              Même si ton code a une erreur de syntaxe, je crois que c'est la façon d'affecter les valeurs aux variables dans le select, sur le fond il répond a ma question puisque c'est bien les deux variables de sorties qui faisaient défaut.
                              Pour ce qui est du nombre de requêtes tu as aussi raison, ca ne va pas diminuer le nombre, je voulais parler des échanges client->serveur.
                              Merci pour ton aide bonne journée, a+
                              • Partager sur Facebook
                              • Partager sur Twitter

                              utilisé plusieurs variables dans une procedure stockée

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown