Partage
  • Partager sur Facebook
  • Partager sur Twitter

Procédure stockée et INSERT

    16 mars 2019 à 11:21:36

    Bonjour :)

    J'ai une petite base de données MySQL pour laquelle je veux créer une procédure stockée plutôt simple. Mon but est de simplifier les INSERT afin d'éviter le INTO table(valeur1, valeur2.......)

    Je souhaite simplement avoir à taper "CALL nouveau(paramètre1, paramètre2...)"

    Voici donc ce que j'ai fait:

    DELIMITER |
    
    CREATE PROCEDURE nouveau
        (p_date_contact DATE,
         p_nom VARCHAR, 
         p_ville VARCHAR,
         p_nom_contact VARCHAR, 
         p_courriel VARCHAR, 
         p_telephone VARCHAR, 
         p_notes TEXT)
    
    BEGIN
        INSERT INTO contact(date_contact, nom, ville, nom_contact, courriel, telephone, notes)
        VALUES   (p_date_contact, p_nom, p_ville, p_nom_contact, p_courriel, p_telephone, p_notes);
    END |
    
    DELIMITER ;
    

    Sauf que ça ne marche pas. MySQL refuse la création de la procédure et me renvoie ce message:

    ERROR 1064 (42000): 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 '
         p_nom, 
         p_ville,
         p_nom_contact, 
         p_courriel, 
         p_teleph' at line 2
    mysql> 
    mysql> DELIMITER ;
    

    Voyez-vous où ça coince ?  Merci ^^

    • Partager sur Facebook
    • Partager sur Twitter
      17 mars 2019 à 12:00:48

      Salut Delgesu essaie de fournir une taille à tes VARCHAR en te basant sur ta base de donné
      CREATE PROCEDURE nouveau
          (p_date_contact DATE,
           p_nom VARCHAR(50),
           p_ville VARCHAR(25),
           p_nom_contact VARCHAR(10),
           p_courriel VARCHAR(25),
           p_telephone VARCHAR(10),
           p_notes TEXT)

      -
      Edité par Lhéritier 17 mars 2019 à 12:15:22

      • Partager sur Facebook
      • Partager sur Twitter
        18 mars 2019 à 16:10:43

        Salut

        Merci c'est ça. Mais comment se fait-il ? Pourquoi doit-on à nouveau donner une taille ?? C'est bizarre :o

        En tout cas merci ;)

        -
        Edité par Delgesu 18 mars 2019 à 16:11:33

        • Partager sur Facebook
        • Partager sur Twitter
          18 mars 2019 à 16:52:01

          Ta procédure ne peut pas deviner que ses paramètres vont correspondre à telle ou telle colonne de telle ou telle table ...

          Un paramètre doit être défini comme une variable ou colonne, avec un type et une taille ;)

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            18 mars 2019 à 16:58:03

            Ben, à partir du moment où entre BEGIN et END on procède exactement comme dans un INSERT "traditionnel", non je ne comprends pas pourquoi il faut repréciser. D'ailleurs, dans le cours elle ne fait pas comme ça.

            Bien sûr que oui, ma procédure pourrait bien deviner quel paramètre correspond à telle colonne.  o_O

            Je ne vois pas pourquoi elle ne le fait pas.  Il ne devrait même pas y avoir à repréciser le type de la colonne.

            "Tu prends tel paramètre et tu le balances dans telle colonne. Si la valeur rentre bien dans tous les critères de la colonne (type et taille), alors tout va bien, sinon message d'erreur."

            Ça devrait être aussi simple que ça, AMHA. :pirate:

            -
            Edité par Delgesu 18 mars 2019 à 17:07:35

            • Partager sur Facebook
            • Partager sur Twitter
              18 mars 2019 à 17:28:44

              De manière générale, un programme ne devine jamais rien ...

              Ici, tu réfléchis comme si une procédure stockée ne servait qu'à faire ton simple INSERT INTO ... mais ce n'est pas le cas ... une procédure peut faire beaucoup d'autres choses ...

              Au passage faire une procédure pour remplacer un INSERT INTO n'est pas vraiment utile en soit ... c'est tuer une mouche avec un bazooka ...

              Delgesu a écrit:

              dans le cours elle ne fait pas comme ça

              Peux-tu citer le passage du cours sur lequel tu t'appuies ?

              Dans le cours, il y a un exemple de procédure avec un paramètre de type VRACHAR, et l'on voit bien que l'on déclare la taille : https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql/1972254-structurez-vos-instructions#/id/r-1989455

              Un type de données est presque toujours associé à une taille, sauf pour les alias comme INT, SMALLINT, TINYINT, etc.

              La seule chose que je veux bien t'accorder, c'est que l'erreur levée par MySQL n'est pas très explicite ...

              -
              Edité par Benzouye 18 mars 2019 à 17:29:30

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                20 mars 2019 à 19:02:44

                Je comprends, et tu as raison pour le cours. "Sean Connery" ..........

                Oui, je tue une mouche avec un bazouka, mais ce n'est pas grave. C'est histoire de m'entraîner avec MySQL....

                • Partager sur Facebook
                • Partager sur Twitter

                Procédure stockée et INSERT

                × 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