2016-08-12 14 views
0

MySQLにトリガーを作成したいのですが、構文エラーが発生します。 PHPMyAdminでクエリを実行しようとしましたが、MySQLクライアントから直接クエリを実行しようとしました。MySQLで構文エラーが発生しました

はここでエラーです:

1064 - あなたはあなたのSQL構文でエラーが発生しています。ライン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 ; 

答えて

0

は、ここで良いのリクエストです:

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 ; 
0

であなたはELSEIFの代わりにELSIFを試してみましたが、「」の近くに使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください?私は解決策を見つけた

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 
+0

はい、私は同じエラー... – Julien

+0

感謝を持っているが、私はまだ同じエラーを持っています。私の質問でリクエストを更新しました – Julien

関連する問題