Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème procédure

insert puis select id

Sujet résolu
    14 novembre 2017 à 17:37:32

    Bonjours à tous, 

    J'ai besoin de votre aide, j'ai deux tables : 

    - une table personne(id_personne, nom, prenom, age, genre)

    - une table athlete(taille, poids,photo, biographie, id_personne, id_pays, id_equipe, id_sport)

    Ma procédure me permet d’insérer dans la table personne puis récupère l'id_personne pour insérer dans la table athlete, mais cela ne fonctionne que pour le premier enregistrement après l'erreur " Le résultat contient plus d'un enregistrement " apparaît.

    DELIMITER |
    CREATE PROCEDURE insert_athlete (IN nom varchar(25), prenom VARCHAR(25),
    age int, genre varchar (25), taille float, poids float, photo varchar(25),
    biographie text (1000),id_pays int, id_equipe int, id_sport int)
    BEGIN
      DECLARE
      idp int(5);
      INSERT INTO `personne` (`id_personne`, `Nom`, `Prenom`, `Age`, `Genre`)  VALUES (NULL,nom,prenom,age,genre);
      SELECT id_personne INTO @idp FROM personne WHERE  'nom'= nom and 'prenom' =prenom;
      INSERT INTO Athlete (`Taille`, `Poids`, `Photo`, `Biographie`,`id_personne`,`id_pays`,`id_equipe`,`id_sport`)
      VALUES (taille,poids,photo,biographie,@idp,id_pays,id_equipe,id_sport);
    END |
    DELIMITER ;

    Et lorsque que je vais dans la table personne les enregistrements sont bien inserer, mais pas dans la table athlete.

    Je pense que cela viens de mon Select, mais je ne trouve pas de solution.

    Merci d'avance pour votre aide :)

    • Partager sur Facebook
    • Partager sur Twitter
    Laurene
      14 novembre 2017 à 18:35:17

      Bonjour,

      Laureneb a écrit:

      cela ne fonctionne que pour le premier enregistrement après l'erreur " Le résultat contient plus d'un enregistrement " apparaît

      Laureneb a écrit:

      SELECT id_personne INTO @idp FROM personne WHERE 'nom'= nom and 'prenom' =prenom;

      Dans ta requête SELECT, tu ne donnes pas des noms de colonnes mais des chaînes de caractères (regarde la coloration syntaxique) ... Il faut retirer les quotes (apostrophes). Mais comme tu as très mal choisi tes noms de variables (ils portent le même nom que les colonnes) il faut mettre des quotes obliques (Alt Gr+7) :

      SELECT id_personne INTO @idp FROM personne WHERE `nom` = nom and `prenom` = prenom;

      Je te conseille de renommer tes variables pour éviter l'ambiguïté avec les noms de colonnes, en mettant par exemple "p_" devant chacune ...

      Laureneb a écrit:

      récupère l'id_personne

      C'est le rôle de la fonction LAST_INSERT_ID() ...

      DELIMITER |
      CREATE PROCEDURE insert_athlete (
      	nom varchar(25),
      	prenom VARCHAR(25),
      	age int,
      	genre varchar (25),
      	taille float,
      	poids float,
      	photo varchar(25),
      	biographie text (1000),
      	id_pays int,
      	id_equipe int,
      	id_sport int
      )
      BEGIN
      	INSERT INTO `personne` ( `Nom`, `Prenom`, `Age`, `Genre` )
      	VALUES ( nom, prenom, age, genre );
      	
      	INSERT INTO Athlete ( `Taille`, `Poids`, `Photo`, `Biographie`,`id_personne`,`id_pays`,`id_equipe`,`id_sport` )
      	VALUES ( taille, poids, photo, biographie, LAST_INSERT_ID(), id_pays, id_equipe, id_sport );
      END |
      DELIMITER ;

      Avec cela tu ne devrais pas avoir de problème et le code est simplifié ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        14 novembre 2017 à 21:08:29

        Merci beaucoup pour votre aide, ça fonctionne parfaitement et c'est plus propre, merci :)
        • Partager sur Facebook
        • Partager sur Twitter
        Laurene

        Problème procédure

        × 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