- 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.
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é ...
Merci beaucoup pour votre aide, ça fonctionne parfaitement et c'est plus propre, merci
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.