J'ai corrigé le code à l'aide de la réponse donnée dans le débordement de la pile. Je veux parcourir la chaîne d'ID séparés par des virgules, mais je ne peux pas le faire. La procédure ci-dessous ne met à jour que le premier enregistrement et ne met pas à jour les autres enregistrements. Quelles corrections sont nécessaires pour que je puisse faire une boucle dans une chaîne séparée par des virgules. Ce est le code de mon SPLa procédure pour faire une boucle entre les chaînes séparées par des virgules ne fonctionne pas
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
Le code est tel que prévu dans les réponses à ce poste.
J'ai essayé avec la fonction find_in_set() mais cela ne fonctionne que si je passe les identifiants depuis le début et ne fonctionne pas si je passe les Ids aléatoirement. Ceci est mon script pour la table
CREATE TABLE `testtable` (
Id
int (11) NULL DEFAULT, Status
varchar (255) COLLATE utf8_unicode_ci NULL DEFAULT ) MOTEUR = 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');
Ceci est la procédure stockée BEGIN UPDATE TestTable état SET = 'C' où ID = FIND_IN_SET (Id, strIDs); END
strIds est de type varchar.
Maintenant essayez @ strIDs = '2'
Il ne fonctionne pas..L'erreur est montrée àDECLARE StrLen. J'utilise Navicat 8 Lite pour MySQl. Le débogage n'est pas possible –
@ Devart..Elle fonctionne si je supprime DELEMETER avant et arrière, mais ne boucle pas si je passe '1,2,3' sous forme de chaîne. Je veux mettre à jour le statut où les IDs sont 1,2,3 mais il ne met à jour que pour 1 –
J'ai modifié ma réponse. – Devart