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 01/08/2006, 17h29   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 117
Points : 10
Points : 10
Par défaut Trigger dans Mysql

bonjour,
comment ecrire le code qui permet d'incremonterla valeur d'un champs d'une table dés qu'on insere un nouveau enregistrement dans une autre table à l'aide de trigger
Merci d'avoir me repondre
taroudant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2006, 17h40   #2
Rédacteur
 
Avatar de Biglo
 
Inscription : juillet 2002
Messages : 537
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : juillet 2002
Messages : 537
Points : 561
Points : 561
Salut,

Code :
1
2
3
4
5
6
7
8
DELIMITER |
 
CREATE TRIGGER nomTrigger BEFORE INSERT ON table1
  FOR EACH ROW BEGIN
    UPDATE table2 SET col1=col1+1 WHERE ...
|
 
DELIMITER ;
Plus d'infos : http://dev.mysql.com/doc/refman/5.0/...e-trigger.html
Biglo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2006, 04h41   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 117
Points : 10
Points : 10
Par défaut Erreur dans TRIGGER

Bonjour,
J'ai créer un trigger ds mysql 5.0 comme suivant:
DELIMITER |
CREATE TRIGGER test BEFORE INSERT ON activite_journaliere
FOR EACH ROW BEGIN
UPDATE phase SET charge_reel = charge_reel+0.25 WHERE phase.code_phase=activite_journaliere.code_phase;
END;
| DELIMITER;

mais il m'affiche un message d'erreur de syntaxe quand j'insere une nouvelle activité;
Merci d'avance
taroudant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2006, 12h20   #4
Rédacteur
 
Avatar de Biglo
 
Inscription : juillet 2002
Messages : 537
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : juillet 2002
Messages : 537
Points : 561
Points : 561
Dans un trigger avant/après insertion, l'objet NEW fait référence à la ligne qui va être ou a été insérée. Donc dans ton WHERE :

Code :
WHERE phase.code_phase = NEW.code_phase;
Ensuite, tu as repris mon exemple en gardant un trigger qui s'exécute avant (BEFORE) l'insertion. Il vaut mieux l'exécuter après (AFTER).

Et enfin, au cas où tu n'y aurais pas penser, n'oublie pas qu'il te faudra aussi un trigger AFTER UPDATE dans le cas où le code_phase d'une activité changerait. Ainsi qu'un trigger AFTER DELETE dans le cas où une activité serait supprimée.
Biglo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2006, 13h37   #5
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 117
Points : 10
Points : 10
Par défaut Autre erreur

ca marche pour l'insertion d'une d'une nouvelle activité mais j'ai une erreur de syntaxe dans le trigger de delete voici mon code:
DELIMITER |
CREATE TRIGGER tester AFTER DELETE activite_journaliere
FOR EACH ROW BEGIN
UPDATE phase SET charge_reel =charge_reel - 0.25
WHERE phase.code_phase=NEW.code_phase;
END;
| DELIMITER;

Merci+++
taroudant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2006, 14h31   #6
Rédacteur
 
Avatar de Biglo
 
Inscription : juillet 2002
Messages : 537
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : juillet 2002
Messages : 537
Points : 561
Points : 561
Regarde le lien que je t'avais donné dans ma première réponse

Dans le cas d'un DELETE, ce n'est plus NEW mais ... (attention, suspense) OLD

La prochaine fois : , c'est plus agréable à lire.
Biglo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h20.


 
 
 
 
Partenaires

Hébergement Web