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

时间:2017-04-17 11:18:17

标签: mysql sql stored-functions

我有一个删除单个post的功能,它可以正常工作。

但是当我必须删除多个帖子时(有一些场景,当我必须一起删除多个帖子时)我在查询中调用该函数,如

SELECT fn_delete_post(id) FROM posts WHERE ...

但是我收到了这个错误:

  

无法更新表格'帖子'在存储的函数/触发器中因为它   已经被调用此存储函数/触发器的语句使用。

功能:

CREATE FUNCTION `fn_delete_post`(post_id INT) RETURNS int(1)
BEGIN
    UPDATE posts SET status = 'DELETED' WHERE id = post_id;     
    UPDATE table1 SET `status` = 'DELETED' WHERE ...
    UPDATE table2 SET `status` = 'DELETED' WHERE ...
    UPDATE table3 SET `status` = 'DELETED' WHERE ...

    RETURN 1;
END;

我知道这个错误意味着什么,我只是想不出如何改变我的逻辑,因为我为不同的实体创建了许多函数以实现可重用性。我还有一个delete comment,我在post delete function (未在此处显示)中调用

PS:我编辑了代码只是为了展示我的情景。实际的功能代码要复杂得多,还要做很多其他事情。对于同一错误还有其他问题,但都有不同的情况。

0 个答案:

没有答案