为什么MySQL在创建触发器时会出现此错误?

时间:2012-12-02 04:20:20

标签: mysql triggers

我已创建此触发器以自动生成用户代码,如SDA0001,SDA0002 ...... 我刚刚包含了BEGIN和END之间的主要陈述。在表 agent_mst

上创建 BEFORE INSERT
DECLARE max_id INT;

SET max_id=(SELECT MAX(agent_id_pk)+1 FROM `agent_mst`);
IF (max_id IS NULL) THEN
    SET max_id=1;
END IF;

SET 
NEW.date_added=NOW(), 
NEW.date_updated=NOW(),
NEW.agent_code = CONCAT('SDA', LPAD(max_id, 4,'0'));

它给出的错误如下

  

MySQL说:#1064 - 你的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在'DECLARE max_id INT附近使用的语法; SET max_id =(SELECT   MAX(agent_id_pk)+1 FROM agent_mst); '第1行

我正在使用phpMyAdmin创建此触发器。

有什么建议在这里出错吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

这应该有效:

DELIMITER $$

CREATE TRIGGER trigger_name BEFORE INSERT ON `agent_mst`
FOR EACH ROW 
BEGIN
    DECLARE max_id INT;

    SET max_id=(SELECT MAX(agent_id_pk)+1 FROM `agent_mst`);
    IF (max_id IS NULL) THEN
        SET max_id=1;
    END IF;

    SET NEW.date_added=NOW(),
        NEW.date_updated=NOW(),
        NEW.agent_code = CONCAT('SDA', LPAD(max_id, 4,'0'));

END $$

DELIMITER ;

答案 1 :(得分:0)

在mySQL中,对于所有pl / sql函数,我们应该首先设置分隔符。 Becoz它将把所有的半音作为行尾。