[Résolu][Trigger] mise a jour d'un champ lors de l'uptate d'un autre

mise a jour d'un champ lors de l'uptate d'un autre [Résolu][Trigger] - SQL/NoSQL - Programmation

Marsh Posté le 26-10-2009 à 15:44:00    

Bonjour,
 
Je ma lance actuellement dans les "triggers" (soyez indulgent, il s'agit du premier que je crée).
 
Je possède une table qui comporte trois champs.
 
Table : test
nom des champs : id / visible / date
 
Mon but est de créer un trigger qui lorsque l'on place visible sur 1, il fasse une mise a jour de la date en y insérant la date actuelle.
 
Voici mon code erronée :
 

Code :
  1. DELIMITER ^
  2. CREATE TRIGGER UPDATE AFTER UPDATE ON test FOR EACH ROW
  3. begin
  4.   IF (NEW.etat=='1') then NEW.date=CURRENT_TIMESTAMP;
  5.   end IF;
  6. end^
  7. DELIMITER ;


 
Pourriez vous m'aider ?
Merci


Message édité par johnson950 le 26-10-2009 à 17:15:43
Reply

Marsh Posté le 26-10-2009 à 15:44:00   

Reply

Marsh Posté le 26-10-2009 à 15:59:34    

Peut-être parce que tu veux nommer ton trigger "update" et que ça lui plait pas ?
 
Sinon qu'est-ce qu'il a d'erroné en fait ? Il y a un message d'erreur ?


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 26-10-2009 à 16:09:37    

Merci pour ta réponse, j'ai changé le nom de la fonction en "test".
Même erreur : ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '== 1) then NEW.DATE=CURRENT_TIMESTAMP;

Reply

Marsh Posté le 26-10-2009 à 16:16:49    

Il n'y a pas de parenthèse autour de la condition du IF. Et l'opérateur de comparaison d'égalité est un simple "=".


Message édité par cgo2 le 26-10-2009 à 16:17:06

---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 26-10-2009 à 16:20:14    

Merci pour ta réponse.
Cependant je crois qu'il n'apprécie pas le "CURRENT_TIMESTAMP"
 
Nouvelle erreur : ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.date=CURRENT_TIMESTAMP.
 
Une idée ?
Merci

Reply

Marsh Posté le 26-10-2009 à 16:29:32    

Euh là pour CURRENT_TIMESTAMP je sais pas (essaye d'utiliser une fonction plutôt que cette variable), je crois que le problème c'est surtout qu'il faut utiliser "SET truc = bidule" et pas directement "truc = bidule".
En plus si tu veux modifier la ligne NEW, il faut que ton trigger soit en BEFORE UPDATE et non AFTER UPDATE.
 
Tu ferais quand même bien de lire la doc de MySQL, parce que toutes ces réponses s'y trouvent hein...


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 26-10-2009 à 17:14:42    

Merci pour le coup de main !
 

Code :
  1. DELIMITER ^
  2. CREATE TRIGGER test1 BEFORE UPDATE ON test FOR EACH ROW
  3. begin
  4.   DECLARE temp DATE;
  5.   SET temp=current_timestamp;
  6.   if NEW.etat='1' then SET NEW.date=temp;
  7.   end if;
  8. end^
  9. DELIMITER ;


Message édité par johnson950 le 26-10-2009 à 17:16:34
Reply

Marsh Posté le 26-10-2009 à 17:42:13    

Sérieusement t'es obligé de passer par une variable temporaire ? "SET NEW.date = CURRENT_TIMESTAMP" ça marche pas ?
Sinon t'as essayé avec une fonction : http://dev.mysql.com/doc/refman/5. [...] tions.html ? Genre "SET NEW.date = NOW()" ça marche pas non plus ?


Message édité par cgo2 le 26-10-2009 à 17:43:44

---------------
When it's from Finland it's good.  - Mon blog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed