我正在尝试设置一个MySQL触发器,该触发器将在表中的行更新时触发。发生这种情况时,它将检查以查看一列的新值,然后相应地设置另一列。当我测试它时,出现错误:
1442-无法更新存储函数/触发器中的表'opportunities2',因为调用该存储函数/触发器的语句已使用该表。
这是我的触发器:
BEGIN
IF NEW.opportunityOwnerRole <> OLD.opportunityOwnerRole AND
NEW.opportunityOwnerRole LIKE '%one%'
THEN
UPDATE opportunities2 SET NEW.opportunityProduct = 'one'
WHERE rowId = NEW.rowId;
ELSEIF NEW.opportunityOwnerRole <> OLD.opportunityOwnerRole AND
NEW.opportunityOwnerRole NOT LIKE '%two%'
THEN
UPDATE opportunities2 SET NEW.opportunityProduct = 'two' WHERE rowId = NEW.rowId;
END IF;
END
有什么想法吗?谢谢!
编辑:下面的正确答案,但是想要在任何人需要时发布固定的触发器:
BEGIN
IF NEW.opportunityOwnerRole <> OLD.opportunityOwnerRole AND
NEW.opportunityOwnerRole LIKE '%one%'
THEN
SET NEW.opportunityProduct = 'one';
ELSEIF NEW.opportunityOwnerRole <> OLD.opportunityOwnerRole AND
NEW.opportunityOwnerRole NOT LIKE '%two%'
THEN
SET NEW.opportunityProduct = 'two';
END IF;
END
答案 0 :(得分:1)
触发器无法触发更新或将语句插入到调用触发器操作的表中。 您可以做的是在触发代码内(触发之前)操纵更新或插入语句
例如
IF NEW.opportunityRole <> OLD.opportunityRole
THEN
SET NEW.opportunityRole = 'one';
END IF