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 31/07/2007, 08h34   #1
Membre habitué
 
Homme Sébastien
Développeur informatique
Inscription : août 2003
Messages : 252
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : août 2003
Messages : 252
Points : 120
Points : 120
Par défaut [trigger] opération avant/apres un bloc IF

Bonjour,
Je cherche a executer plusieurs commande dans un trigger dont le code se trouve ci-dessous :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DELIMITER $$
DROP TRIGGER `db`.`MAJ_dossier`$$
CREATE TRIGGER `db`.`MAJ_dossier` AFTER UPDATE ON `db`.`dossiers` 
FOR each row BEGIN
	IF OLD.recu IS NULL AND NEW.recu IS NOT NULL AND DATEDIFF(NOW(), NEW.depot)<=5 THEN
		INSERT INTO mail VALUES(NEW.id_dossier, '1');
	ELSEIF OLD.recu IS NULL AND NEW.recu IS NOT NULL AND DATEDIFF(NOW(), NEW.depot) BETWEEN 6 AND 29 THEN
		INSERT INTO mail VALUES(NEW.id_dossier, '2');
	ELSEIF OLD.recu IS NULL AND NEW.recu IS NOT NULL AND DATEDIFF(NOW(), NEW.depot) BETWEEN 30 AND 50 THEN
		INSERT INTO mail VALUES(NEW.id_dossier, '3');
	ELSEIF OLD.recu IS NULL AND NEW.recu IS NOT NULL AND DATEDIFF(NOW(), NEW.depot)>50 THEN
		INSERT INTO mail VALUES(NEW.id_dossier, '4');
	END IF;
	/*UPDATE dossiers SET last_maj=NOW() WHERE id_dossier=NEW.id_dossier;*/
END;
$$
DELIMITER ;
Si je ne décommente pas l'UPDATE, je peux effectuer seulement des insertions/suppression mais il m'est impossible d'effectuer des UPDATE.
smarties est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 10h07   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Si dans ton trigger AFTER UPDATE tu fais un UPDATE sur la même table, tu fais une boucle infinie de triggers.

Il suffit que tu fasses
Code :
SET new.last_maj = NOW() ;
et de préférence dans un trigger BEFORE UPDATE.

Sinon, tu peux aussi utiliser ON UPDATE CURRENT TIMESTAMP.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 10h25   #3
Membre habitué
 
Homme Sébastien
Développeur informatique
Inscription : août 2003
Messages : 252
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : août 2003
Messages : 252
Points : 120
Points : 120
Comment fonctionne le :
Code :
ON UPDATE CURRENT TIMESTAMP
Je dois le mettre dans le trigger ?
Lorsque je défini l'attribut ?
smarties est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 15h21   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
dans la définition de la colonne (les entités ont des attributs, mais les tables ont des colonnes). RTFM http://dev.mysql.com/doc/refman/5.0/en/timestamp.html.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 15h49   #5
Membre habitué
 
Homme Sébastien
Développeur informatique
Inscription : août 2003
Messages : 252
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : août 2003
Messages : 252
Points : 120
Points : 120
Ca ne marche pas, j'ai essayé ca avec CURRENT_TIMSTAMP (erreur : Invalid default value for 'last_maj') et CURRENT_DATE (erreur de syntaxe) :
Code :
1
2
3
4
5
6
7
ALTER TABLE `dossier`
	CHANGE `last_maj` `last_maj`
	DATE NOT NULL
	DEFAULT CURRENT_TIMESTAMP
	ON UPDATE CURRENT_TIMESTAMP
	COMMENT 'Date de dernière modification d''un enregistrement.'
;
PS : mon attribut last_maj est de type DATE et j'aimerai bien le conserver si possible.
smarties est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 16h07   #6
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par smarties
PS : mon attribut last_maj est de type DATE et j'aimerai bien le conserver si possible.
Le ON UPDATE CURRENT TIMESTAMP ne marche qu'avec un type TIMESTAMP.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h53   #7
Membre habitué
 
Homme Sébastien
Développeur informatique
Inscription : août 2003
Messages : 252
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : août 2003
Messages : 252
Points : 120
Points : 120
Ca a l'air de marcher, merci pour ton aide.
smarties 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 08h18.


 
 
 
 
Partenaires

Hébergement Web