您好,我正在尝试为 SQL 触发器声明一些用户定义的变量(例如:@var),该触发器对给定订阅者 ID 的选定行中的值求和。但是,我的 DECLARE 语句出现语法错误。
这是我的代码:
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 中的列名称,所以我不确定为什么它会返回此错误。
最佳答案
我不确定您的错误是什么,但您不需要为此目的使用变量。你有几个问题。一方面,更新该行后不应再次更新该行。而且,您的触发器实际上并不涉及正在更改的数据。我怀疑你想要这样的东西:
DELIMITER //
CREATE TRIGGER trg_subscribers_points
BEFORE UPDATE ON subscribers_points FOR EACH ROW
BEGIN
set new.total_points = (new.action + new.share + new.viral)
END//
DELIMITER ;
请注意,触发器已更改为“更新前”触发器。
关于MySQL触发器用户声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27258673/