else时,mysql触发错误1064

fslejnso  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(424)

我试着做一个简单的触发器,如果第三列有一个特定的值,检查两列是否为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之间附上我们的多个语句,我试着这样做。
你知道为什么我在编译触发器时会有这个错误吗?

31moq8wy

31moq8wy1#

这两者之间有区别 ELSE IF 以及 ELSEIF 用法。 ELSE IF 需要由显式关闭 END IF .
在这里 IF 空格后 ELSE 被视为新的 IF 代码块。
作为 ELSEIF 由其父级关闭 IF .
要么你改变 ELSE IFELSEIF 在你的陈述中,或者
添加 END IF 到里面去 IF 阻止。
阅读文档:
if语法

IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF

相关问题