可能与之相关:MySQL trigger definition - 1064 error
嗨,
我正在尝试在MariaDB 10.4.10-GA中的用户表上添加触发器。目的是,用户可以设置第二个邮件地址,但是该邮件地址不能与第一个邮件地址相同。给定触发器的代码:
CREATE TRIGGER MyValidator
BEFORE INSERT
ON User
FOR EACH ROW
BEGIN
IF NEW.U_Mail LIKE '%_@%_.%' THEN
IF NEW.U_AlternateMail LIKE NEW.U_Mail THEN
SIGNAL SQLSTATE VALUE '45001'
SET MESSAGE_TEXT = 'User - Mail already set';
ELSEIF NEW.U_AlternateMail NOT LIKE '%_@%_.%' THEN
SIGNAL SQLSTATE VALUE '45002'
SET MESSAGE_TEXT = 'User - Not a Mail';
END IF;
ELSE
SIGNAL SQLSTATE VALUE '45000'
SET MESSAGE_TEXT = 'User - Bad Mail in database';
END IF;
END;
MariaDB告诉我:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 9
这将是SET
语句。甚至只是在SET testvar="text";
之后添加BEGIN
。产生相同的错误,只是将新行作为错误行。
我已经在服务器上坐了好几个小时了,在互联网上找不到任何有用的东西。
根据文档,此SQL代码应该正确:https://mariadb.com/kb/en/library/signal/
相互重置,上述链接中的示例代码也无法解决相同的错误:
CREATE PROCEDURE test_error(x INT)
BEGIN
DeclARE errno SMALLINT UNSIGNED DEFAULT 31001;
SET @errmsg = 'Hello,world!';
IF x = 1 THEN
SIGNAL SQLSTATE '45000' SET
MYSQL_ERRNO = errno,MESSAGE_TEXT = @errmsg;
ELSE
SIGNAL SQLSTATE '45000' SET
MYSQL_ERRNO = errno,MESSAGE_TEXT = _utf8'Hello,world!';
END IF;
END;
任何想法,可能是什么问题?
问候