Bonsoir,

Je démarre tout juste avec les procédures stockées sous MySQL et j'ai un soucis lorsque je m'attaque à un nom de table dynamique.

Voici la procédure que j'utilise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
CREATE PROCEDURE maj (IN paramMarchand VARCHAR(30))
	BEGIN
		DECLARE varIdMarchand INT;
		DECLARE varTable VARCHAR(35);
		SET varTable = CONCAT('zzz_', paramMarchand);
 
		SET varIdMarchand = (SELECT id_marchand FROM marchands WHERE code_marchand = paramMarchand AND actif = 1);
 
		SET @reqMarque = CONCAT('INSERT IGNORE INTO marques (marque) SELECT distinct(marque) FROM ', varTable, ' order by marque');
		PREPARE rp FROM @reqMarque;
		EXECUTE rp;
		DEALLOCATE PREPARE rp; 
 
	END
Et j'obtiens l'erreur (en exécutant la procédure) :
#1312 - PROCEDURE nombase.maj can't return a result set in the given context

Hors si je crée la même avec un nom de table fixe, soit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
CREATE PROCEDURE maj (IN paramMarchand VARCHAR(30))
	BEGIN
		DECLARE varIdMarchand INT;
 
		SET varIdMarchand = (SELECT id_marchand FROM marchands WHERE code_marchand = paramMarchand AND actif = 1);
 
		INSERT IGNORE INTO marques (marque) SELECT distinct(marque) FROM zzz_machin order by marque'; 
 
	END
Là ça fonctionne, avez-vous une idée du problème ?
Merci.