Dans MySQL, les procédures stockées permettent l'exécution d'instructions SQL prédéfinies. Une exigence courante consiste à transmettre un nom de table en tant que paramètre à une procédure stockée, lui permettant ainsi de fonctionner dynamiquement sur différentes tables.
Pour utiliser une variable pour le nom de la table, plutôt que d'utiliser le nom littéral de la requête, suivez ces étapes :
CREATE PROCEDURE `usp_SelectFromTables`( IN TableName VARCHAR(100) )
Ici, TableName est le paramètre qui contiendra la table nom à utiliser dans la procédure.
Lors de l'exécution, le paramètre TableName est une variable. Toutefois, les instructions SQL nécessitent des chaînes pour les références aux tables. Pour convertir la variable en chaîne, utilisez la fonction CONCAT() :
La référence de table dans MySQL implique généralement un nom de base de données, un point et une table nom. Concaténez ces informations avec la variable à l'aide de CONCAT() ou :
SET @sql_text = CONCAT('SELECT * FROM ', @TableName);
Pour exécuter dynamiquement l'instruction SQL préparée, utilisez PREPARE et EXECUTE :
PREPARE stmt FROM @sql_text; EXECUTE stmt;
Considérons l'exemple suivant, où une requête SQL dynamique est construite sur la base sur la valeur de TableName, cname et vname :
SET @cname:='jello'; SET @vname:='dwb'; SET @sql_text = CONCAT('select concept_id,concept_name,',@vname,' from enc2.concept a JOIN enc2.ratings b USING(concept_id) where concept_name like (''%',@cname,'%'') and 3 is not null order by 3 asc'); PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt;
En suivant ces étapes, vous pouvez utiliser efficacement une variable pour spécifier le nom de la table dans une procédure stockée MySQL, améliorant ainsi la flexibilité et la réutilisabilité.
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!