|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Inscription : février 2006 Messages : 54 ![]() |
Bonjour,
Je voudrais pouvoir exécuter des tâches plus ou moins complexes, automatiquement, à l'insertion dans une table MySql. En fait je veux faire deux choses: - quand une nouvelle ligne est insérée dans une table, la copier automatiquement dans une autre table qui a le même schéma. j'ai essayé avec un trigger, ça nemarche pas : on ne peut pas nommer des tables dans un trigger. La copie doit être immédiate, c'est pour du reporting en temps réel. - quand une nouvelle ligne est insérée dans une table, et sous certaines conditions sur les valeurs de la ligne, exécuter un script qui envoie un mail avec des paramètres extraits de la ligne insérée. Encore une fois, ça doit être en temps réel. Je ne crois pas qu'un trigger puisse faire l'affaire, vu qu'on ne peut pas appeler CALL dans le corps d'un trigger. Peut-être y-a-t'il un équivalent de cron dans MySql ? Sinon je ne vois absolument pas comment faire. (N.B. Je ne maitrise pas le moment ou les lignes sont rajoutées dans la table en question). Merci pour vos suggestions |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : février 2006 Messages : 953 ![]() |
Citation:
Citation:
C'est un pis aller, si qqn voit comment faire ça depuis mysql... |
||
|
|
00
|
|
|
#3 | |||
|
Futur Membre du Club
![]() Inscription : février 2006 Messages : 54 ![]() |
Citation:
Pour en avoir le coeur net, j'ai essayé de créer le trigger suivant : Code :
Pour le deuxième problème, un CRON pourrait marcher: Dans la table que le script programmé surveille, il y a un champ 'DateTime' donnant la date d'enregistrement de chaque ligne de la table. je pourrais donc surveiller les lignes rajoutées depuis la dernière fois que j'ai exécuté mon script, et effectuer les actions qui s'imposent. Pb : comme ça doit être en temps réel, le script doit tourner au moins toutes les minutes: ç'est pas bon pour la charge serveur. |
|||
|
|
00
|
|
|
#4 | ||||
|
Membre Expert
![]() Inscription : février 2006 Messages : 953 ![]() |
J'ai une 5.0.27-community-nt et je peux tout à fait faire :
Code :
Citation:
Citation:
|
||||
|
|
00
|
|
|
#5 | ||
|
Futur Membre du Club
![]() Inscription : février 2006 Messages : 54 ![]() |
Allons bon, j'ai aussi la version 5.0.27, mais si je tente de créer un trigger comme celui que tu donnes en exemple, j'ai l'erreur suivante:
Code :
ERROR 1064 (42000) You have an error IN your SQL syntax; CHECK FOR the manual [...] TO USE near '' at line 1 Code :
Ceci est bizarre : un "show databases;" marche bien, mais un "show triggers;" fait planter la connection, et retourne: Code :
ERROR 2013 (HY000): Lost connection TO MySQL server during query Il faut que je réinstalle tout ? |
||
|
|
00
|
|
|
#6 | ||||
|
Membre Expert
![]() Inscription : février 2006 Messages : 953 ![]() |
Citation:
Code :
INSERT INTO mytable2 SELECT * FROM mytable WHERE mytable.id=new.id L'idéal mais le plus contraignant à écrire reste : Code :
INSERT INTO mytable2 VALUES (new.id, new.champ1, new.champ2); Citation:
|
||||
|
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Inscription : février 2006 Messages : 54 ![]() |
Merci pour ta patience, Sivrît, mais moi je la perds, la mienne...
J'ai essayé les deux variantes de triggers que tu proposes. J'arrive à les déclarer, mais sur des tables de tests différentes de celles sur lesquelles je m'acharne depuis quelques temps. Passons... Ces triggers plantent toujours à l'exécution, avec toujours la même erreur: il ne reconnait pas la table "new" !! : "mabase.new is not known" Pour couronner le tout, je viens de m'apercevoir que mon serveur SQL de prod est une version 4.X Conclusion :je laisse tomber les triggers sous MySql; je ferai des scripts qui tournent souvent; trop souvent, mais bon... |
|
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : février 2006 Messages : 54 ![]() |
J'ai trouvé la solution !!
Il ne reconnait pas 'new', mais il reconnait 'NEW' ! Donc il faut mettre NEW en majuscules dans le trigger, et ça roule Je croyais que mysql était totalement insensible à la casse... T'aing, chius content |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : février 2006 Messages : 953 ![]() |
Insensible à la casse... sauf pour les noms de tables (suivant réglage, la valeur par défaut dépendant de l'OS). Inutile de dire que j'ai fait mes tests sous windows je crois
Donc le "new" des triggers est considéré comme une table et non un mot clef... intéressant. Bien, content pour toi ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com