Bonjour, j'ai une fonction stoquée que je créé qui me pause un petit probleme:
je déclare un curseur sur lequel je boucle pour un traitement mais j'obtiens toujours la même valeur: 1
cette requete:
retourne(par exemple)Code:SELECT C.id FROM (SELECT id FROM collections ORDER BY RAND()) C LIMIT 12;
ce que je recherche à avoir, jusque là pas de soucis. Maintenant dans cette fonction:Code:
1
2
3
4
5
6
7
8
9
10
11
12 134 47 57 117 174 133 175 184 121 151 179 100
j'ai en retour une liste de 12 "1"Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 CREATE PROCEDURE `maj_collection`(IN id INT) BEGIN DECLARE done INT DEFAULT 0; DECLARE idcolls INT(10); DECLARE curs CURSOR FOR SELECT C.id FROM (SELECT id FROM collections ORDER BY RAND()) C LIMIT 12; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; DELETE FROM collectionephemere; OPEN curs; REPEAT FETCH curs INTO idcolls; IF done = 0 THEN SELECT idcolls; -- INSERT INTO collectionephemere (`collectionephemere`.`idcollection`, `collectionephemere`.`idclient`) VALUES (id,idcolls); END IF; UNTIL done END REPEAT; CLOSE curs; END
du coup je comprends pas trop d'ou ça peut venir vu que ma requête est bonne (dans le curseur) et qu'il me semble bien l'utiliser dans ma procédure :(
je suis plus habitué à oracle mais j'ai des notions en mysql donc si vous avez des questions ou des remarques sur le code n'hésitez pas.