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 :
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 ;
et voici le code d'erreur obtenu :

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
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