問題:
在表中追蹤項目費用,您想要插入新的費用記錄,同時使用相同的procKey 更新先前記錄的endDate 以在新記錄的startDate 前一天結束。
初始方法:
您嘗試使用以下程式碼建立觸發器:
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$$
但是,此觸發器會導致錯誤:「無法更新儲存函數/觸發器中的表'split',因為它已經是由呼叫此儲存函數/觸發器的語句使用。
觸發器不能修改同一表中的其他行。要實現所需的功能,必須使用預存程序而不是觸發器。預存程序可以作為單一交易的一部分執行多個操作,包括插入或更新您要修改的表。
範例預存程序:
此預存程序可用於依需求更新分割表:以上是如何使用預存程序更新 MySQL 表中的前一行和新行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!