【问题标题】:Trigger syntax error with MySQL使用 MySQL 触发语法错误
【发布时间】:2016-12-19 15:44:18
【问题描述】:

我想在 MySQL 中创建一个触发器,但出现语法错误。 我尝试使用 PHPMyAdmin 或直接从 MySQL 客户端运行查询。

这是错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的 '' 附近使用正确的语法

CREATE TRIGGER asterisk.bi_queueEvents BEFORE INSERT ON aasterisk.queue_log
FOR EACH ROW
BEGIN
IF (NEW.event = 'ADDMEMBER')THEN
INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) VALUES (NEW.agent,'READY',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "READY", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL;
ELSIF (NEW.event = 'REMOVEMEMBER')THEN
INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) VALUES (NEW.agent,'LOGGEDOUT',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "LOGGEDOUT", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL;
ELSIF (NEW.event = 'PAUSE')THEN
INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) VALUES (NEW.agent,'PAUSE',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "PAUSE", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL;
ELSIF (NEW.event = 'UNPAUSE')THEN
INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) VALUES (NEW.agent,'READY',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "READY", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL;
END IF;
END ;
//

DELIMITER ;

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    您是否尝试过用 ELSIF 代替 ELSEIF?

    IF(boolean_expression 1)THEN 
       S1; -- Executes when the boolean expression 1 is true 
    ELSIF( boolean_expression 2) THEN
       S2;  -- Executes when the boolean expression 2 is true 
    

    【讨论】:

    • 谢谢,但我仍然遇到同样的错误。我更新了我的问题中的请求
    【解决方案2】:

    我找到了解决方案,这是一个很好的要求:

    delimiter |
    CREATE TRIGGER bi_queueEvents
    BEFORE INSERT ON queue_log
    FOR EACH ROW
    BEGIN
        IF NEW.event = 'ADDMEMBER' THEN
            INSERT INTO agent_status (agentId,agentStatus,timestamp,callid)
            VALUES (NEW.agent,'READY',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "READY", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL;
        ELSEIF NEW.event = 'REMOVEMEMBER' THEN
            INSERT INTO agent_status (agentId,agentStatus,timestamp,callid)
            VALUES (NEW.agent,'LOGGEDOUT',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "LOGGEDOUT", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL;
        ELSEIF NEW.event = 'PAUSE' THEN
            INSERT INTO agent_status (agentId,agentStatus,timestamp,callid)
            VALUES (NEW.agent,'PAUSE',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "PAUSE", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL;
        ELSEIF NEW.event = 'UNPAUSE' THEN
            INSERT INTO agent_status (agentId,agentStatus,timestamp,callid)
            VALUES (NEW.agent,'READY',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "READY", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL;
        END IF;
    END |
    delimiter ;
    

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 2014-07-21
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2019-04-26
      • 2018-07-29
      相关资源
      最近更新 更多