【发布时间】:2019-06-12 10:57:52
【问题描述】:
我有表 up_files 和 fgusers3。 在 up_files 上插入后,触发器应该更新 fgusers3。
up_file: id,uname, days,d_leave
fgusers3: id,name,AnualLeave,cf
我尝试不使用 if else 语句并且工作正常。每次用户插入数据时,触发器都会更新 fgusers3 表中的 AnualLeave 行和 cf 行。
DROP TRIGGER IF EXISTS `after_insert`;
CREATE DEFINER=`root`@`localhost`
TRIGGER `after_EL` BEFORE INSERT ON `up_files`
FOR EACH ROW
UPDATE fgusers3
SET fgusers3.AnualLeave = fgusers3.AnualLeave - NEW.days + fgusers3.cf,fgusers3.cf = 0
WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave'
在我添加 if else 语句后,我有错误。请帮助我是 mysql 触发器的新手:
DELIMITER #
CREATE TRIGGER `after_insert` BEFORE INSERT ON `up_files` FOR EACH ROW
BEGIN
UPDATE fgusers3
IF(fgusers3.cf < NEW.days ) THEN
SET fgusers3.AnualLeave = fgusers3.AnualLeave - NEW.days +fgusers3.cf,fgusers3.cf = 0
WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave' ;
ELSE
SET fgusers3.cf = fgusers3.cf - NEW.days
WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave' ;
END IF ;
END#
DELIMITER ;
解释
如果用户插入“紧急休假”,我会尝试将天数扣除年假或从去年结转(cf)(如果有)。
如果 cf available 比 day 足够,那么将从 cf 中扣除,
否则从年假中扣除
【问题讨论】:
-
我在您的第二个陈述中没有看到其他内容?
-
你说你有一个错误是什么?
-
如果 (fgusers3.cf
-
您的第一个查询由一个语句组成,因此您可以不设置分隔符并使用 begin..end 块您的第二个查询由 2 个语句组成,因此您必须设置分隔符并使用开始。 .结束块。请查看dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html
-
您需要在
WHERE子句末尾的END IF之前添加一个;