Sélection de table dynamique à l'aide de variables dans les procédures stockées MySQL
Pour utiliser une procédure stockée dans MySQL pour sélectionner des données dans diverses tables, le nom de la table doit être passé en paramètre. Cependant, rencontrer des problèmes en essayant cela peut être frustrant.
Abordons l'exemple fourni dans lequel le code suivant ne fonctionne pas comme prévu :
CREATE PROCEDURE `usp_SelectFromTables`( IN TableName varchar(100) ) BEGIN SELECT * FROM @TableName; END
L'erreur rencontrée lors de la tentative d'exécution de cette opération le code est que le TableName n'existe pas. Cela est dû au fait que la variable @TableName n'est pas résolue correctement. Pour résoudre ce problème, du SQL dynamique est utilisé.
Le SQL dynamique permet l'exécution d'instructions SQL créées au moment de l'exécution, ce qui le rend idéal pour des situations comme celle-ci. Voici une version corrigée du code utilisant du SQL dynamique :
CREATE PROCEDURE `usp_SelectFromTables`( IN TableName varchar(100) ) BEGIN SET @sql_text = CONCAT('SELECT * FROM ', TableName); PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; END
Dans ce code, la fonction CONCAT() est utilisée pour construire l'instruction SQL basée sur le nom de table fourni. L'instruction PREPARE prépare le SQL dynamique pour l'exécution et l'instruction EXECUTE l'exécute. Enfin, l'instruction DEALLOCATE PREPARE désalloue l'instruction préparée, libérant ainsi des ressources.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!