[Procédure stockée] Utilisation des paramètres

Fermé
Mixame - 2 déc. 2015 à 18:02
 Mixame - 3 déc. 2015 à 09:15
Bonjour tout le monde !

Alors voila, pour faire cours, j'affiche le contenu d'une DB sur une feuille excel via un peu de code en VBA. Jusque là pas de problème.
Mon souhait serait de pouvoir réinjecter dynamiquement les modifications apportées sur le document excel, dans la DB.

Pour ce faire, lorsque je modifie le contenu d'une cellule, via une fonction associé je récupère le nom de la table, de la colonne, ainsi que l'ID.
Toujours en VBA, j'appelle une procédure stockée sur ma DB mySQL, avec ces paramètres: ça donne quelque chose du genre:
call ma procdéure(nom_table, nom_col, id, value)

Et donc, ma procédure stockée version simplifiée pour l'exemple:

CREATE DEFINER=`root`@`localhost` PROCEDURE `updateTable`(input_table_name varchar(30), input_col_name varchar(30), input_id int, input_string_value varchar(30))
BEGIN
UPDATE input_table_name
SET input_col_name = input_string_value
WHERE id = input_id;
END


Je récupère une erreur SQL à l'execution, la table "input_table_name" n'existe pas. Il semblerait que mySQL n'accepte pas mon paramètre à cet endroit et le prenne tout simplement pour le nom de la table.. Pareil pour le nom de la colonne.

Alors est-ce que je fais mal quelque chose, ou est-ce qu'on ne peut tout simplement pas se servir des procédures stockées de cette façon?

Si vous avez d'autres question n'hésitez pas.

Merci d'avance :)
A voir également:

1 réponse

jordane45 Messages postés 38389 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 janvier 2025 4 729
2 déc. 2015 à 18:48
Bonjour,

Ceci semble fonctionner correctement :
DROP PROCEDURE IF EXISTS updateTable;

DELIMITER | -- On change le délimiteur
CREATE PROCEDURE `updateTable`(input_table_name varchar(30), input_col_name varchar(30), input_id int, input_string_value varchar(30))
BEGIN
  SET @q = CONCAT('UPDATE ',input_table_name,' SET ', input_col_name, ' = "', input_string_value,'" WHERE id=',input_id);
  PREPARE stmt FROM @q;
  EXECUTE stmt;
END |

DELIMITER ;  -- On remet le délimiteur par défaut

0
Bonjour jordane45, et merci pour votre aide :)

La solution proposée semble fonctionner, je vais avancer sur mon projet en l'utilisant, je verrais ce que ça donne !
Merci, bonne continuation
0