2014-10-06 71 views
0

我試圖使用mysql存儲功能。 功能:在觸發使用MySQL存儲功能

DELIMITER $$ 
CREATE FUNCTION ChangeHistory(newValue VARCHAR(255), oldValue VARCHAR(255), attributeName VARCHAR(255), action VARCHAR(255), entityId BIGINT(20), modifiedBy BIGINT(20)) RETURNS TINYINT(1) 
    NOT DETERMINISTIC 
BEGIN 
    IF newValue != oldValue THEN 
    INSERT INTO ChangeHistoryPlayer 
    SET 
     action = action, 
     timeCreated = now(), 
     entityId = entityId, 
     modifiedBy= modifiedBy, 

     attributeName = attributeName, 
     oldValue = oldValue2, 
     newValue = newValue2; 
    END IF; 
RETURN 1; 
END 

函數調用:

USE `XXX_admin`; 
DELIMITER $$ 
CREATE TRIGGER `player_AUPD` AFTER UPDATE ON `player` FOR EACH ROW 
BEGIN 
    ChangeHistory(NEW.firstName, OLD.firstName, 'firstName', 'AFTER_UPDATE', NEW.entityId, NEW.modifiedBy); 
END 

錯誤(changeHistoy之後和之前 「(」):

syntax error, unexpected '(' expecting ':' 

爲什麼

+0

你真的需要一個功能嗎?爲什麼不使用過程,然後'調用ChangeHistory(...);'觸發器。 – Rimas 2014-10-06 14:49:03

回答

0
CREATE TRIGGER `player_aupd` after UPDATE 
ON `player` 
FOR EACH row 
begin 
    SELECT Changehistory(new.firstname, old.firstname, 'firstName', 'AFTER_UPDATE' 
     , 
         new.entityid, new.modifiedby); 
end 

添加選擇s應該做的伎倆!

希望這會有所幫助!

+0

現在,當我嘗試「應用」時,得到:錯誤1064:您的SQL語法中有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'(NEW.firstName,OLD.firstName,'firstName',..... – lior 2014-10-06 14:38:52

+0

附近使用正確的語法。嗯,上面的語法是有效的嗎?當你寫'apply '你的意思是測試觸發器嗎?或者試圖創建觸發器? – Drew 2014-10-06 14:47:19

+0

試圖創建觸發器 – lior 2014-10-06 14:49:18