MYSQL-无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用

时间:2015-05-15 16:51:00

标签: mysql triggers

我一直收到这个错误: “无法在存储的函数/触发器中更新表'wp_posts',因为它已被调用此存储函数/触发器的语句使用”

当Woocommerce将记录插入WP_posts表时,我希望触发器确定插入的新记录是否有post_title (column) = 'scheduled_subscription_end_of_prepaid_term' (field data)。如果是,我希望触发器从ID(新插入行中的列/数据)中提取new.post_content

提取ID后,我想更新ID。 ID与新插入行的ID不同。

有人可以告诉我我做错了什么吗?

delimiter //
create TRIGGER DB.Cancel
before INSERT ON DB.wp_posts FOR EACH ROW

BEGIN

DECLARE updateid bigint;
Declare variable longtext;
declare variable2 longtext;

IF NEW.post_title = 'scheduled_subscription_end_of_prepaid_term' then

set updateid := NEW.id;
set variable := RIGHT(new.post_content, LOCATE(":", new.post_content));
set variable2 :=  LEFT(variable, LOCATE("2052", variable)-2);

update db.wp_posts
set post_status="wc-cancelled"
where id=variable2 and post_status='wc-processing';

end if;
END//

1 个答案:

答案 0 :(得分:3)

如果您在完全插入之前尝试更改要插入的行,则只需设置NEW值,而不是运行UPDATE。

如果您尝试更新触发器所在的同一个表中的一个或多个不同的行,则不允许这样做。