我尝试执行一个简单的触发器,如果第三列具有特定值,则检查两列是否为空。
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之间附上我们的多个语句,我试图这样做。
在编译触发器时,我知道为什么会出现此错误?
答案 0 :(得分:0)
ELSE IF
和ELSEIF
使用情况存在差异。
ELSE IF
需要END IF
明确关闭
space IF
之后的ELSE
被视为新的IF
代码块。
ELSEIF
由其父IF
关闭的位置。
您可以在语句中将ELSE IF
更改为ELSEIF
,或者
将END IF
添加到内部IF
块。
阅读文档:
IF search_condition THEN statement_list [ELSEIF search_condition THEN statement_list] ... [ELSE statement_list] END IF