【问题标题】:How to get back all the rows which are updated in MySQL/MariaDB如何取回 MySQL/MariaDB 中更新的所有行
【发布时间】:2018-06-21 06:24:29
【问题描述】:

我希望有人可以帮助我。我想取回所有更新的行,我在这个论坛中找到了一些东西。但现在我创建了一个“PROCEDURE”,并希望将 Update 语句与所需的其他语句组合为字符串,并使用“PREPARE”语句执行该字符串。但由于某些原因,这不起作用。查询(不是字符串)本身可以工作。

有人可以帮助我吗?

DELIMITER $$

DROP PROCEDURE IF EXISTS updateAndGetUpdatedRows$$

CREATE PROCEDURE updateAndGetUpdatedRows (IN query varchar(255))
  BEGIN
    SET @buffer = CONCAT_WS(' ','SET @uids := null;',query,'AND ( SELECT @uids := CONCAT_WS(",", ID, @uids) );','SELECT @uids;');

    PREPARE stmt FROM @buffer;
    EXECUTE stmt;

    DEALLOCATE PREPARE stmt;
  END$$

DELIMITER ;

call updateAndGetUpdatedRows('UPDATE expensesData SET value = 22 WHERE ID = 64');

系统:

innodb_version: 5.5.55-MariaDB-38.8 协议版本:10 slave_type_conversions
版本:5.5.57-MariaDB version_comment:MariaDB 服务器 version_compile_machine:x86_64 version_compile_os: Linux

【问题讨论】:

  • 你只能将1条语句传递给sql。
  • 谢谢它帮助我 :-) 我改变了它,现在它可以工作了。

标签: mysql prepared-statement mariadb


【解决方案1】:

因为 P.Salmon 我想通了。按照解决方案:

分隔符 $$

DROP PROCEDURE IF EXISTS updateAndGetUpdatedRows$$

CREATE PROCEDURE updateAndGetUpdatedRows (IN query varchar(255))
  BEGIN
    SET @uids := null;
    SET @buffer = CONCAT_WS(' ',query,'AND ( SELECT @uids := CONCAT_WS(",", ID, @uids) );');

    PREPARE stmt FROM @buffer;
    EXECUTE stmt;

    DEALLOCATE PREPARE stmt;
    SELECT @uids;

  END$$

DELIMITER ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 2020-06-27
    • 2015-11-04
    • 2016-01-19
    • 2017-05-26
    • 2019-09-02
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多