在存储过程的结果集中设置受影响的行

问题描述 投票:0回答:1

我正在使用最新版本的 MySQL。 我写了一个执行三个更新语句的存储过程。

现在,我想要返回的是一个 ResultSetHeader,其中“affectedRows”的数量设置为更新值的总数。在谷歌上,我找不到任何关于在存储过程中设置它的信息。

我已经能够“选择@RowCount”,但这会在我的返回语句中添加一个普通对象。我希望这个值只是在“affectedRows”中,而不需要任何额外的数据。请参阅下面的代码,了解我是如何发表声明的。变量@rows 是我想作为“affectedRows”返回的变量。

CREATE DEFINER=`root`@`localhost` PROCEDURE `MOVE_COLUMN_INDEX`(ColumnId INT, NewIndex INT)
BEGIN
    DECLARE InvalidNewIndexTooHigh CONDITION FOR SQLSTATE '02001';
    DECLARE InvalidNewIndexTooLow CONDITION FOR SQLSTATE '02002';
    DECLARE OldIndex INT DEFAULT (SELECT `Index` FROM `Column` WHERE `Id` = ColumnId);

    IF (NewIndex > (SELECT MAX(`Index`) FROM `Column`)) THEN
        SIGNAL InvalidNewIndexTooHigh
            SET MESSAGE_TEXT = "The provided index value is greater than the highest index value.";
    ELSEIF (NewIndex < 0) THEN
        SIGNAL InvalidNewIndexTooLow
            SET MESSAGE_TEXT = "The provided index value cannot be negative.";
    ELSE
        UPDATE `Column` SET `Index` = 999
            WHERE `Id` = ColumnId;
        SET @rows = ROW_COUNT();
        UPDATE `Column` SET `Index` = IF(NewIndex < OldIndex, `Index` + 1, `Index` - 1)
            WHERE (NewIndex <= `Column`.`Index` AND `Column`.`Index` < OldIndex)
                OR (OldIndex < `Column`.`Index` AND `Column`.`Index` <= NewIndex)
            ORDER BY IF(OldIndex < NewIndex, `Index`, -`Index`);
        SET @rows = @rows + ROW_COUNT();
        UPDATE `Column` SET `Index` = NewIndex
            WHERE `Id` = ColumnId;
    END IF;
END

我返回的对象(在 JS 中): ResultSetHeader { fieldCount: 0, affecctedRows: 1, insertId: 0, info: '', serverStatus: 2, warningStatus: 0 }

添加

SELECT @rows
时的对象: [ Object], ResultSetHeader { fieldCount: 0, affecctedRows: 1, insertId: 0, info: '', serverStatus: 2, warningStatus: 0 }

mysql resultset
1个回答
0
投票

A计划:结束

SELECT @rows AS "affectedRows";

B 计划:将“@rows”更改为“@affectedRows”,然后该变量将在 SP 之外可用。

© www.soinside.com 2019 - 2024. All rights reserved.