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 08/09/2011, 14h52   #1
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2009
Messages : 102
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2009
Messages : 102
Points : 37
Points : 37
Par défaut [MySql5.5] Trigger before update Oo

Salut à tou(te)s,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
DELIMITER $$
 
CREATE TRIGGER RNA BEFORE UPDATE ON myTable 
FOR EACH ROW
BEGIN
    IF NEW.myvalue >16383 THEN
    SET NEW.myvalue =0;
    END IF;
END 
$$;
 
DELIMITER ;
Voici le bout de code qui me pose problème.
C'est pourtant un simple trigger. J'ai l'impression que le trigger n'arrive pas à évaluer le NEW.myvalue ... c'est étonnant.
Quand je me base sur les OLD.myvalue là j'arrive à obtenir un effet...

Il s'agit s'implement de remettre à zero le champ myvalue lorsque j'atteinds une limite sup de 16383 ...

le trigger intervient lors de requetes UPDATE sur cette table dont le but est simplement d'incrémenter myvalue.

Code :
1
2
 
UPDATE myTable SET myvalue = myvalue + 1;
Des idées ?

Merci d'avance.
Xploit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 14h57   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Comme c'est un trigger BEFORE UPDATE (avant la mise à jour), myvalue n'a pas encore été incrémentée et ne dépasse donc probablement pas 16383 sinon le trigger aurait fait son effet.
Essaie avec un AFTER UPDATE ou avec myvalue + 1 dans le IF.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 15h41   #3
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2009
Messages : 102
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2009
Messages : 102
Points : 37
Points : 37
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
DELIMITER $$
 
CREATE TRIGGER RNA BEFORE UPDATE ON myTable
FOR EACH ROW
BEGIN
    IF (OLD.ID = 5 AND OLD.myValue = 16383) THEN
    SET NEW.myValue = 0;
    END IF;
END 
$$;
 
DELIMITER ;
Ce trigger marche mais dès que je veux mettre autre chose à la place du OLD.myValue = 16383, par exemple OLD.myValue > 16383 et que je mets ma table dans les conditions pour reussir le test ça ne marche pas.

IDEM avec le code suivant

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
DELIMITER $$
 
CREATE TRIGGER RNA BEFORE UPDATE ON myTable
FOR EACH ROW
BEGIN
    IF (OLD.ID = 5 AND OLD.myValue = 16383) THEN
    SET NEW.myValue = 0;
    ELSE SET NEW.myValue = 17;
    END IF;
END 
$$;
 
DELIMITER ;
Ce code devrait dans tous les cas modifier la valeur de la case. Dans le cas ou la condition du IF n'est pas remplie le SET du ELSE devrait s'executer... mais rien...
Xploit 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 20h00.


 
 
 
 
Partenaires

Hébergement Web