MySQL - 更新查询不会在参数化存储函数中执行

问题描述

DELIMITER //
DROP FUNCTION IF EXISTS SaveMessage //
CREATE FUNCTION SaveMessage(msg VARCHAR(255),eid BIGINT(20),cdate DATETIME) 
RETURNS INT
BEGIN
    INSERT INTO db1.user_notification_message (`message`) VALUES (msg);
    SET @C := (select db1.user_notification_message.id FROM user_notification_message ORDER BY id DESC LIMIT 1);
    UPDATE db1.user_notification un INNER JOIN db1.entity_user eu ON eu.user_id = un.user_id SET user_notification_message_id = @C WHERE eu.entity_id = eid AND un.created_date = cdate;
    RETURN @C;
END; //

DELIMITER ;

我写了这个函数来更新两个表。记录将插入到 user_notification_message 表中,同时其引用保存到 user_notification 表中。

调用函数如下。

select SaveMessage(msg,entity_id,created_date) as message_id FROM view1;

我正在使用视图在 user_notification_message 表中填充所需的结果。

如果我在没有更新查询的情况下运行此函数 user_notification_message 表将按预期填充。但是,如果我使用更新查询运行它,则只有一条记录会保存到 user_notification_message 表中,并且 user_notification 表上不会发生更新(这意味着它不会执行过去更新查询)。我单独测试了更新查询效果很好。

在这里做错了什么?我是否犯了语法错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)