Mysql
 sql >> Database >  >> RDS >> Mysql

MYSQL:IF con condizione OR e corrispondenza REGEXP

Finalmente ho ottenuto la versione finale e corretta di trigger dopo aver eseguito il debug di molte possibilità e aver scavato le risposte SO. Mi aspettavo una risposta rapida perché non era quella domanda SCI-FI che altri sviluppatori non erano in grado di decifrare.

Errore 1 :Spazio tra ENDIF . Dovrebbe essere END IF .

Errore 2 :new.column mancante dalla definizione del trigger;

VERSIONE CORRETTA :

CREATE TRIGGER `trg_contact_insert_profanity_check` BEFORE INSERT ON `contacts`
 FOR EACH ROW BEGIN
IF ((new.email IN (SELECT word FROM profanity)) OR (new.message
 IN (SELECT word FROM profanity)) OR (new.message REGEXP '/(http|https|ftp|ftps)?(://)?[a-zA-Z0-9-.]+.[a-zA-Z]{2,3}(/S*)?/' ))
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = "Database Error: BAD REQUEST";
END IF;
END