Page 1 sur 1

Pb : trigger => resolu

Posté : 05 mai 2010, 16:31
par marvllt
Bonjour,

J'ai un petit problème avec un trigger et je vois pas le problème je demande donc votre aide :)
create trigger montrigger
 after insert on  matable for each row
begin
  update matable set numint = 'zzz' where nom =:new.nom;
end;
j'aimerai que mon trigger remplisse le champ numint apres un insert to matable .....

voici le message d'erreur que l'on me renvoie
#1064 - 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 :new.nom line 4

merci de votre aide

Martin

ps: je suis sur linux avec LAMP et phpmyadmin d'installé

Re: Pb : trigger

Posté : 06 mai 2010, 11:52
par Duke
salut 8-)

Je suis pas absolument persuadé mais ça me parrait etrange les 2 points devant le new, as tu essayé sans ?

Re: Pb : trigger

Posté : 07 mai 2010, 09:29
par marvllt
Merci pour ta réponse

effectivement il aime pas le ":"

voici mon trigger maintenant
delimiter //
CREATE TRIGGER mon trigger AFTER INSERT ON matable
FOR EACH ROW
BEGIN
		UPDATE matable SET numint = SUBSTRING(new.nom,1,3) where nom= new.nom;
END//
delimiter ;
il n'y a plus d'erreur que je veux le mettre avec phpmyadmin mais maintenant les insert ne marchent plus :(

voila l'erreur qui s'affiche
#1062 - Duplicate entry '' for key 'PRIMARY'
a savoir que numint est une clef primaire

merci de votre aide

Re: Pb : trigger

Posté : 09 mai 2010, 02:04
par datesta
Bonjour,

Tu dois avoir une ligne avec numint à vide dû a tes précédentes insertions sans triggers. Si tu modifies cette ligne, ça devrait être bon.

En regardant ce que tu fais, je me demande si ton trigger est utile ?! tu pourrais remplir numint directement lors de l'insert vu que tu utilises le champ nom
:?:

Re: Pb : trigger

Posté : 10 mai 2010, 08:30
par marvllt
effectivement en supprimant les anciennes insertions ça marche :D !!

j'ai quand même fait des modifications voila la derniere version de mon trigger
delimiter //
CREATE TRIGGER ajout_sigle before INSERT  ON intervenants FOR each row   
begin
SET new.numint=SUBSTRING(new.nom,1,3) ;
END//
delimiter ;
et pour répondre à ta question datesta j'ai créé une fonction d'insertion sur mon site j'ai plusieurs formulaire pour remplir mes tables et ma fonction va chercher les élements dans les formulaire a remplir.
comme c'est une fonction pour remplir n'importe quelle table et que ce trigger concerne qu'une table je ne peux pas faire l'action dans mon code php en tout cas je ne vois pas comment faire :D

merci a tous pour votre aide