Bonjour,
Je viens de changer de boulot et je passe de PHP/Oracle à VB.Net/MySQL5...
Autant dire que c'est radical comme changement...
Toujours est-il, j'essaie de créer mon premier trigger sous MySQL5 et je recontre des soucis... Alors, je vais vous expliquer ce que je veux obtenir et poster mon code...
J'ai une table 'messages' et une table 'insultes'. Lors de l'insertion d'un message dans ma table 'messages', je veux, par l'intermédiaire d'un trigger before insert, comparer le texte de mon message à l'ensemble des occurences existantes dans ma table 'insultes', via une boucle, et le flaguer si la comparaison matche au moins une correspondance.
Voici le code exact que je tente d'éxécuter dans MySQL Query Browser :
et voici le code d'erreur obtenu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 -- Trigger DDL Statements USE `gestion_messages`; DELIMITER // CREATE OR REPLACE TRIGGER `tg_filtr_insultes` BEFORE INSERT ON `messages` FOR EACH ROW BEGIN -- Déclare le curseur qui va lire la table des insultes répertoriées DECLARE cur1 CURSOR FOR SELECT libelle FROM insultes; -- Déclare et instancie la variable flag_insulte DECLARE flag_insulte INT DEFAULT 0; -- Déclare et instancie la variable flag_insulte_total (total boucle) DECLARE flag_insulte_total INT DEFAULT 0; -- Déclare la variable qui contiendra le libellé Insulte à comparer DECLARE libelle_insulte VARCHAR(45); -- Ouvre le curseur OPEN cur1; -- Démarre une boucle, lit la table insultes et compare libellé_message aux insultes répertoriées REPEAT FETCH cur1 INTO libelle_insulte; SELECT ' '.UCASE(TRIM(libelle_insulte)).' ' REGEXP ' '.UCASE(TRIM(NEW.texte_message)).' ' INTO flag_insulte; IF flag_insulte = 1 THEN flag_insulte_total = flag_insulte_total + flag_insulte; END IF; END REPEAT; -- Ferme le curseur CLOSE cur1; -- Si pas d'insulte trouvée => Flag affichage à 1, sinon Flag à 2 IF flag_insulte_total = 0 THEN SET NEW.flag_affichage = 1; ELSE SET NEW.flag_affichage = 2; END IF; END// DELIMITER ;
Donc, en plus de m'aider à résoudre cette erreur qui parait simple mais pour la quelle rien de ce que je fais ne fonctionne, j'aimerai avoir votre avis sur mon code... Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Script line: 4 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 'TRIGGER `tg_filtr_insultes` BEFORE INSERT ON `messages` FOR EACH ROW BEGIN ' at line 1![]()
Partager