2012-12-02 74 views
0

我已經創建了這個觸發器,用於自動生成用戶代碼,如SDA0001,SDA0002 ... 我剛剛在BEGIN和END之間包含了主要語句。這是對錶創建BEFORE INSERT agent_mst爲什麼MySQL在創建觸發器時發生此錯誤?

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); 'at line 1

我使用phpMyAdmin創建了這個觸發器。

任何建議這裏有什麼問題? 在此先感謝。

回答

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

nopes。仍然是同樣的錯誤。我使用phpMyAdmin創建觸發器。這是否會造成麻煩? – aslamdoctor

+0

@aslamdoctor - 鄧諾。嘗試命令行或工作臺。 –

+0

是的,它從命令行工作。必須學習新的東西。無論何時從phpmyadmin創建觸發器,始終包含BEGIN和END語句,即使它們自動包含這些語句。 – aslamdoctor

0

在MySQL,我們應該先設置分隔符的所有PL/SQL函數。 Becoz將採用所有半球作爲線的結束。