Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL:IF com condição OR e correspondência REGEXP


Finalmente obtive a versão final e correta do gatilho depois de depurar muitas possibilidades e cavar respostas SO. Esperava uma resposta rápida, pois não era aquela pergunta SCI-FI que outros desenvolvedores não conseguiram decifrar.

Erro 1 :Espaço entre ENDIF . Deve ser END IF .

Erro 2 :new.column ausente da definição do gatilho;

VERSÃO CORRETA :
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