Maison >base de données >tutoriel mysql >Comment récupérer des données à partir de tables spécifiées dynamiquement dans des procédures stockées ?
Noms de tables dynamiques dans les fonctions de procédure stockée
Énoncé du problème :
L'objectif est de créer une fonction de procédure stockée qui récupère une valeur d'une table, où le nom de la table est fourni dynamiquement en tant que paramètre. Cependant, les tentatives de génération dynamique de l'instruction SQL dans la fonction entraînent l'erreur « Le SQL dynamique n'est pas autorisé ». L'exigence est de trouver une méthode pour surmonter cette limitation et obtenir le résultat souhaité.
Solution :
Bien que le SQL dynamique ne soit pas autorisé dans les fonctions de procédure stockée, il est Il est possible d'utiliser des instructions préparées pour construire et exécuter dynamiquement des instructions SQL. Malheureusement, les instructions préparées ne peuvent pas être utilisées directement dans les fonctions.
Une approche alternative consiste à créer une procédure stockée avec un paramètre OUT :
CREATE PROCEDURE getName (IN tableName VARCHAR(50), IN myId INT(11), OUT myName VARCHAR(50)) BEGIN SET @GetName = CONCAT('SELECT name INTO @var1 FROM ', tableName, ' WHERE>
Cette procédure accepte les paramètres d'entrée tableName et myId, et définit le paramètre myName OUT sur la valeur récupérée. La procédure construit dynamiquement l'instruction SQL et utilise une instruction préparée pour l'exécution.
Pour utiliser cette procédure, suivez ces étapes :
SET @tableName = 'tbl'; SET @myId = 1005; SET @name = NULL; CALL getName(@tableName, @myId, @name); SELECT @name;
Cette solution permet la récupération dynamique de valeurs de différents tables dans une procédure stockée.
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!