我有一个表格来跟踪特定项目的费用。这些费用可能会随着时间的推移而变化,因此我有两列(startDate、endDate),当前的费用集始终在遥远的将来有一个 endDate。我已经有一个触发器,用于对输入的新行进行一些计算,但我还希望发生的是,如果我输入一个已经有条目的项目,我想将前一个条目的 endDate 设置为该条目的前一天新条目的 startDate 和新 endDate 为预定的远程日期。这是我首先尝试的代码:
CREATE
DEFINER=`root`@`%`
TRIGGER `im`.`splitBeforeIns`
BEFORE INSERT ON `im`.`split`
FOR EACH ROW
BEGIN
SET NEW.tcPercent = (NEW.tcOfficeFee / NEW.globalFee) * 100 , NEW.proPercent = 100 - NEW.tcPercent, NEW.endDate = 20501231;
UPDATE im.split set endDate = ADDDATE(NEW.startDate, -1) where procKey = NEW.procKey AND endDate = 20501231;
END$$
我得到的错误是:
ERROR 1442: Can't update table 'split' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
这个问题的答案可能不受欢迎,但事实是:你不能那样做。
触发器不能更新同一个表的另一行作为行,调用触发器。
执行此操作的典型方法是创建一个存储过程,插入/更新目标表,然后更新其他行,所有这些都在事务中进行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)