【问题标题】:#1442 - Can't update table in stored function/trigger because it is already used#1442 - 无法更新存储函数/触发器中的表,因为它已被使用
【发布时间】:2020-05-24 06:53:18
【问题描述】:

我有一张名为 permitissued 的表。当我进行插入时,我希望调用触发器并更新 BRIMSCode 列。当我运行时,我收到错误 #1442 - Can't update table 'permitissued' in stored function/trigger 因为它已被调用此存储函数/触发器的语句使用。

DROP TRIGGER IF EXISTS `updatePermitissuedBRIMSCode`;CREATE DEFINER=`root`@`localhost` TRIGGER `updatePermitissuedBRIMSCode` AFTER INSERT ON `permitissued` FOR EACH ROW UPDATE permitissued SET permitissued.BRIMSCode=(SELECT ParentBRIMSCode FROM subcategorycharges WHERE permitissued.ActivityCode = subcategorycharges.BRIMSCode)

这是我的 sql 插入

INSERT INTO `businesses`.`permitissued` (`id`, `BusinessID`, `BillNo`, `ReceiptNo`, `CalenderYear`, `ActivityCode`, `SBPFee`, `RegistrationFee`, `DateIssued`, `AmountBilled`, `AmountPaid`, `Period`, `StartDate`, `EndDate`, `DateModified`, `printable`, `businessStatus`, `Status`, `BRIMSCode`) VALUES (NULL, '55555', '55555', '55555', '2020', '5', '5', '4', '4', '4', '4', '1', '4', '4', '4', '4', '1', '1', '0')

【问题讨论】:

标签: mysql


【解决方案1】:

您可以改用BEFORE INSERT 触发器并覆盖BRIMSCode 值:

DROP TRIGGER IF EXISTS `updatePermitissuedBRIMSCode`;
CREATE DEFINER=`root`@`localhost` TRIGGER `updatePermitissuedBRIMSCode` 
BEFORE INSERT ON `permitissued` 
FOR EACH ROW 
SET NEW.BRIMSCode = (SELECT ParentBRIMSCode
                     FROM subcategorycharges
                     WHERE NEW.ActivityCode = subcategorycharges.BRIMSCode)

Demo on dbfiddle

【讨论】:

    猜你喜欢
    • 2017-05-23
    • 2023-01-19
    • 1970-01-01
    • 2021-07-09
    • 2021-07-17
    • 2019-08-05
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多