特定のアイテムの料金を追跡するテーブルがあります。これらの料金は時間の経過とともに変化する可能性があるため、2 つの列 (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.