2010-09-07 5 views
3

Je veux changer dynamiquement le nom de la table dans la requête sql. Par exemple, je l'ai prochaine procédure stockée:MySQL Stored Procedure changement dynamique nom de la table

CREATE PROCEDURE NewProc(IN tableName varchar(64),IN message text) 
BEGIN 
    INSERT INTO tableName VALUES (message); 
END; 

Je dois changer tableName dans l'exécution, je peux le faire ou non? Merci.

+0

C'est un modèle de données très discutable pour avoir plusieurs tables avec une colonne de message du même type de données ... –

Répondre

0

Vous devez utiliser SQL dynamique pour prepare et execute une chaîne SQL pour réaliser ce que vous décrivez.

Les noms de tables dynamiques (ou noms de colonnes, ou mots-clés SQL, etc.) doivent être interpolés dans la chaîne SQL avant d'être préparés. Vous ne pouvez pas utiliser les paramètres de requête pour ces éléments dynamiques.

Veillez à éviter les vulnérabilités d'injection SQL lorsque vous interpolez le nom de la table dans votre requête SQL. Par exemple, vous devez vérifier que le nom de la table existe en la recherchant dans le information schema.

Je suis d'accord avec le commentaire de @OMG Ponies - c'est un code smell que vous avez plusieurs tables avec une structure identique de sorte que vous voulez faire la même insertion exacte à la même colonne exacte. Les odeurs de code ne sont pas une garantie que vous avez un mauvais design, mais cela vaut la peine d'être considéré.

Questions connexes