如何获取所有在MySQL / MariaDB中更新的行

时间:2018-06-21 06:24:30

标签: mysql prepared-statement mariadb

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

有人可以帮助我吗?

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 protocol_version:10 slave_type_conversions
版本:5.5.57-MariaDB version_comment:MariaDB服务器 version_compile_machine:x86_64 version_compile_os:Linux

1 个答案:

答案 0 :(得分:0)

由于P.Salmon,我知道了。解决方法如下:

DELIMITER $$

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 ;