当使用多个语句封闭if else时,MySQL会触发错误1064

时间:2018-01-02 11:28:05

标签: mysql triggers

我尝试执行一个简单的触发器,如果​​第三列具有特定值,则检查两列是否为空。

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 个答案:

答案 0 :(得分:0)

ELSE IFELSEIF使用情况存在差异。

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