0
您好我试图为一个SQL触发器声明一些用户定义的变量(EX:@var),该值为给定的用户ID在所选行中求和。但是,我在我的DECLARE语句中收到语法错误。MySQL触发器用户声明的变量
这里是我的代码:
DELIMITER //
CREATE TRIGGER trg_subscribers_points
AFTER UPDATE ON subscribers_points FOR EACH ROW
BEGIN
DECLARE @Sub_ID bigint, @Col1 bigint, @Col2 bigint, @Col3 bigint
(select @Sub_ID = subscriber_id, @Col1 = action, @Col2 = share, @Col3 = viral FROM subscribers_points)
update subscribers_points set total_points = @Col1 + @Col2 + @Col3 where subscriber_id = @Sub_ID
END//
DELIMITER ;
建议吗?提前致谢。
更新的代码:
DELIMITER //
CREATE TRIGGER trg_subscribers_points
BEFORE UPDATE
ON subscribers_points
FOR EACH ROW
BEGIN
SET NEW.total_points = (action + share + viral);
END//
DELIMITER ;
^这将返回一个错误 “在 '字段列表' 未知列 '行动'”。
action,share和viral都是表subscribers_points中的列名,所以我不确定它为什么会返回这个错误。
为什么选择BEFORE?如果更新了这些值中的任何一个,则需要将它们添加到更新后的总量中。为了便于使用,我使用了上面的查询,当我更新表中的一个Item时,触发器给了我这个错误:“无法更新存储的函数/触发器中的表'subscribers_points',因为它已被语句使用它调用了这个存储的函数/触发器。“想法? – wUmpage 2014-12-02 21:32:39
您想要一个'BEFORE'触发器,以便同时更新所有列。我不知道为什么我在触发器中保留'update'。这是导致问题的开始。你只需要设置'new.total_points'。 – 2014-12-02 21:41:41
显然“在存储的函数或触发器中,不允许修改已调用该函数或触发器的语句(用于读取或写入)的表格,当触发器触发时它可能会锁定表格。”所以我现在甚至不知道如何调用这个触发器。 – wUmpage 2014-12-02 21:41:56