Bonjour,
je suis présentement à faire une procédure stocké pour modifier un champ de type SET dans un table quelconque. Je fais un ALTER TABLE manuellement et ca fonctionne à merveille :
1 2
| ALTER TABLE `Test` CHANGE `champSet` `champSet`
SET('0','1','2','3','4') NOT NULL |
Maintenant, ce que je veux faire, c'est de modifier le contenu du champSet pour qu'il contient que des valeurs qui font référence au contenu d'une autre table. En d'autres mots, j'ai une table définie comme suit:
1 2 3 4 5
| CREATE TABLE `SERVICES` (
`idService` tinyint(2) NOT NULL,
`service` varchar(50),
PRIMARY KEY(`idService`)
) |
et qui contient les valeurs suivantes :
0, 'service1'
1, 'service2'
2, 'service3'
3, 'service4'
Si j'ajoute un nouvel enregistrement dans la table SERVICES, je veux que la procédure modifie le contenu du champSet de la table Test pour que le nouvel élément puisse faire partie du SET. Voici la procédure que j'ai créé :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| DROP PROCEDURE IF EXISTS addService $$
CREATE PROCEDURE addService()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE id VARCHAR(2);
DECLARE strSet VARCHAR(50);
DECLARE cur CURSOR FOR SELECT idService FROM services ORDER BY idService;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO id;
IF NOT done THEN
SET strSet = CONCAT_WS(",", strSet,CONCAT("'",id,"'"));
END IF;
UNTIL done END REPEAT;
CLOSE cur;
SELECT message(strSet);
ALTER TABLE `Test` CHANGE `champSet` `champSet`
SET(strSet) NOT NULL;
END $$ |
Le problème est que j'ai une erreur sur la ligne du ALTER TABLE, et j'arrive pas à comprendre pourquoi...
Est-ce que quelqu'un peu m'aider là dessus ??
Partager