Процедура перебора строки, разделенной запятыми, не работает

Я исправил код с помощью ответа, указанного в переполнении стека. Я хочу перебрать строку идентификаторов, разделенных запятыми, но не могу этого сделать. Приведенная ниже процедура обновляет только первую запись и не обновляет другие записи. Какие исправления необходимы, чтобы я мог перебирать строку, разделенную запятыми. Это код для моего 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 (), но она работает, только если я передаю идентификаторы с самого начала и не работает, если я передаю идентификаторы случайным образом. Это мой сценарий для таблицы

CREATE TABLE `testtable` (

Id int (11) DEFAULT NULL, Status varchar (255) COLLATE utf8_unicode_ci DEFAULT NULL ) ENGINE = MyISAM DEFAULT CHARSET = 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 TestTable SET status = 'C' WHERE Id = FIND_IN_SET (Id, strIDs); END

strIds - это тип varchar.

Теперь попробуйте @ strIDs = '2'

8
задан Microsoft Developer 12 October 2011 в 02:16
поделиться