Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/03/2011, 15h34   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 36
Points : 11
Points : 11
Par défaut Récupérer les ids créés dans un INSERT

Bonjour,

Je souhaite faire une requête du genre
Code :
INSERT INTO maTable (monChamp) VALUES (val1),(val2),(val3),...,(valX)
et pouvoir récupérer l'ensemble des ids (champ "id" auto_incrément) de la table correpondant aux enregistrements créés.

Contraintes :
  • Le champ 'monChamp' n'est pas unique
  • Plusieurs process sont susceptibles d'insérer des enregistrements au même moment
  • Je ne peux pas faire appel à BLOCK TABLE

Quelqu'un a-t-il une idée ? Peut-être avec les triggers/déclencheurs et le numéro du process exécutant ... ou plus simple

Merci par avance !!
sergeh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 12h45   #2
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 36
Points : 11
Points : 11
Bonjour,

J'ai presque résolu mon problème :
Je crée une table temporaire qui va contenir les ids créés.
Concernant la table principale, je veux créer un trigger après insertion qui ajoute le NEW.id à la table temporaire.

Le trigger étant commun à tous les processus, je dois tester dans le trigger l'existence de cette table temporaire avant de faire l'insertion (sinon, cela veut dire que je suis dans un autre process et que je n'ai rien à insérer) :

Code :
1
2
3
4
5
6
7
8
9
DELIMITER //
CREATE TRIGGER monTrigger AFTER INSERT ON maTablePrincipale
 FOR EACH ROW BEGIN
            IF /* maTableTempo existe-t'elle ? */ THEN
                INSERT INTO maTableTempo VALUES (new.id);
            END IF;
       END
//
DELIMITER ;
Quelqu'un sait-il ce que je dois mettre pour mon test ?

Merci !!
sergeh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 14h03   #3
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Sans avoir testé, j'essayerais bien ceci :

Code :
1
2
3
4
5
6
7
8
9
DELIMITER //
CREATE TRIGGER monTrigger AFTER INSERT ON maTablePrincipale
 FOR EACH ROW BEGIN
            IF EXISTS maTableTempo THEN
                INSERT INTO maTableTempo VALUES (new.id);
            END IF;
       END
//
DELIMITER ;
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h42.


 
 
 
 
Partenaires

Hébergement Web