如何获取mysql/mariadb中更新的所有行

dldeef67  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(396)

我希望有人能帮助我。我想回到所有的行更新,我发现在这个论坛的东西。但现在我创建了一个“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\版本:5.5.55-mariadb-38.8协议\版本:10从\类型\转换
版本:5.5.57-mariadb版本\注解:mariadb服务器版本\编译\机器:x86 \ 64版本\编译\操作系统:linux

ktca8awb

ktca8awb1#

因为鲑鱼,我想出来了。遵循解决方案:
分隔符$$

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 ;

相关问题