我正在使用最新版本的 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
添加
SELECT @rows
时的对象:
A计划:结束
SELECT @rows AS "affectedRows";
B 计划:将“@rows”更改为“@affectedRows”,然后该变量将在 SP 之外可用。