2014-10-06 62 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