0

我已经创建了这个触发器来自动生成像 SDA0001、SDA0002 这样的用户代码......我刚刚在 BEGIN 和 END 之间包含了主要语句。它是在表agent_mst上插入之前创建的

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 创建这个触发器。

有什么建议吗?提前致谢。

4

2 回答 2

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 ;
于 2012-12-02T04:26:47.203 回答
0

在所有 pl/sql 函数的 MySQL 中,我们应该首先设置分隔符。因为它会将所有分号作为行尾。

于 2012-12-02T05:17:38.540 回答