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 43 44 45 46 47 48
|
-- Trigger DDL Statements
USE gestion_message;
DELIMITER //
CREATE TRIGGER tg_filtr_insult
BEFORE INSERT ON message
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);
-- Déclare la variable qui permettra d'interrompre la boucle
DECLARE done INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
-- Ouvre le curseur
OPEN cur1;
-- Démarre une boucle, parse 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(NEW.texte_message) INTO flag_insulte;
IF flag_insulte = 1 THEN
flag_insulte_total = flag_insulte_total + flag_insulte;
END IF;
UNTIL done 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 ; |
Partager