【发布时间】:2011-12-05 23:34:15
【问题描述】:
在堆栈溢出中给出的答案的帮助下,我已经更正了代码。我想遍历逗号分隔的 Id 字符串,但不能这样做。下面给出的过程只更新第一条记录,而不更新其他记录。需要进行哪些更正,以便我可以遍历逗号分隔的字符串。 这是我的 SP 的代码
BEGIN
DECLARE strLen INT DEFAULT 0;
DECLARE SubStrLen INT DEFAULT 0;
IF strIDs IS NULL THEN
SET strIDs = '';
END IF;
do_this:
LOOP
SET strLen = LENGTH(strIDs);
UPDATE TestTable SET status = 'C' WHERE Id = SUBSTRING_INDEX(strIDs, ',', 1);
SET SubStrLen = LENGTH(SUBSTRING_INDEX(strIDs, ',', 1));
SET strIDs = MID(strIDs, SubStrLen, strLen);
IF strIDs = NULL THEN
LEAVE do_this;
END IF;
END LOOP do_this;
END
代码在这篇文章的答案中提供。
我尝试使用 find_in_set() 函数,但它仅在我从头开始传递 ID 时才有效,如果我随机传递 ID 则不起作用。 这是我的表格脚本
CREATE TABLE `testtable` (
Id int(11) 默认为空,
Status varchar(255) 整理 utf8_unicode_ci 默认为空
) ENGINE=MyISAM 默认字符集=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Records of testtable
-- ----------------------------
INSERT INTO `testtable` VALUES ('1', 'O');
INSERT INTO `testtable` VALUES ('2', 'O');
INSERT INTO `testtable` VALUES ('3', 'O');
INSERT INTO `testtable` VALUES ('4', 'O');
INSERT INTO `testtable` VALUES ('5', 'O');
这是存储过程 开始 UPDATE TestTable SET status = 'C' WHERE Id = FIND_IN_SET(Id, strIDs); 结束
strIds 是 varchar 类型。
现在试试@strIDs='2'
【问题讨论】: