Créer une table MySQL avec un nom variable

Apprenez à créer une table dans mysql avec un nom transmis en tant que paramètre. Cela peut être utile lorsque vous avez besoin pour créer des tableaux en utilisant des procédures stockées.

A+ A-

Aujourd'hui , je devais écrire une procédure de mysql stockée qui pourrait prendre un paramètre et de créer une nouvelle table avec le nom même que la valeur de ce paramètre. Tout était simple, sauf que le nom de la table nouvellement créée se révélait être le nom du paramètre au lieu de la valeur du paramètre.

Ce fut un problème intrigant et a pris un peu de recherche sur Internet avant que je puisse trouver une solution. La solution consiste à utiliser l'instruction PREPARE. Voici le code qui a travaillé (je tronquant le CREATE TABLE et INSERT INTO pour le rendre plus facile à lire):

 DELIMITER $$ 
 DROP PROCEDURE IF EXISTS `tdb_new`.SP_createTempRankTable $$ 
 CREATE DEFINER = `root` @` localhost` PROCEDURE SP_createTempRankTable (IN tableName VARCHAR (200)) 
 COMMENCER 
 SET @ dropTab = CONCAT ( "DROP TABLE IF EXISTS", tableName); 
 SET @ CREATETAB = CONCAT ( "CREATE TABLE", tableName, "(tmp_template_id varchar (10))"); 
 SET @ insertTab = CONCAT ( "INSERT INTO", tableName, "(tmp_template_id) de tmp_template_id SELECT FROM template"); 
 PRÉPARER stmtDrop DE @dropTab; 
 EXECUTE stmtDrop; 

 PRÉPARER stmtCreate DE @createTab; 
 EXECUTE stmtCreate; 
 PRÉPARER stmtInsert DE @insertTab; 
 EXECUTE stmtInsert; 
 END $$ 
 DELIMITER; 

En passant le nom de la table en tant que variable CREATE TABLE, INSERT INTO et DROP TABLE (et probablement beaucoup d'autres) déclarations ne fonctionnera pas. Les instructions préparées sont le moyen de sortir.

Espérons que cela serait utile à quelqu'un! se sentir libre pour me S'il vous plaît demander si vous avez des questions. Je serai heureux d'essayer de vous aider. Merci d'utiliser TechWelkin.

Ads

Partager