我已經通過堆棧溢出中給出的答案糾正了代碼。我想遍歷逗號分隔的字符串,但不能這樣做。下面給出的過程只更新第一條記錄而不更新其他記錄。需要進行哪些更正才能通過逗號分隔的字符串進行循環。 這是我的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()函數,但它只有在我通過ids從頭開始而不工作的情況下才起作用,如果我隨機傳遞Ids。 這是我的表腳本
CREATE TABLE `testtable` (
Id
INT(11)DEFAULT NULL, Status
VARCHAR(255)COLLATE utf8_unicode_ci DEFAULT NULL )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');
這是存儲過程 BEGIN UPDATE SET TestTable的狀態= 'C' 其中id = FIND_IN_SET(ID,strIDs); END
strIds是varchar類型。
現在嘗試@ strIDs = '2'
它不工作..錯誤顯示在DECLARE StrLen。我正在使用Navicat 8 Lite for MySQl。調試是不可能的 –
@ Devart..Its工作,如果我刪除前導和尾DELEMETER,但不循環,如果我通過'1,2,3'作爲字符串。我想更新Ids爲1,2,3的狀態,但它只更新爲1 –
我修改了我的答案。 – Devart