我试着做一个简单的触发器,如果第三列有一个特定的值,检查两列是否为null。
DELIMITER |
CREATE TRIGGER after_insert_ping AFTER INSERT
ON ping FOR EACH ROW
BEGIN
IF NEW.protocol_id = 'sip' THEN
BEGIN
IF NEW.sip_account_name IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'some error';
ELSE IF NEW.is_sip_register_autotest_enabled IS NULL THEN
SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'some error';
END IF;
END;
ELSE
BEGIN
IF NEW.sip_account_name IS NOT NULL THEN
SIGNAL SQLSTATE '45002' SET MESSAGE_TEXT = 'some error';
ELSE IF NEW.is_sip_register_autotest_enabled IS NOT NULL THEN
SIGNAL SQLSTATE '45003' SET MESSAGE_TEXT = 'some error';
END IF;
END;
END IF;
END |
我知道了:
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 ';
ELSE
BEGIN
IF NEW.sip_account_name IS NOT NULL
THEN
' at line 13
我在这里检查了mysql语法:https://dev.mysql.com/doc/refman/5.7/en/if.html
我读到我们需要在begin和end之间附上我们的多个语句,我试着这样做。
你知道为什么我在编译触发器时会有这个错误吗?
1条答案
按热度按时间31moq8wy1#
这两者之间有区别
ELSE IF
以及ELSEIF
用法。ELSE IF
需要由显式关闭END IF
.在这里
IF
空格后ELSE
被视为新的IF
代码块。作为
ELSEIF
由其父级关闭IF
.要么你改变
ELSE IF
至ELSEIF
在你的陈述中,或者添加
END IF
到里面去IF
阻止。阅读文档:
if语法