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 ?

Comment récupérer des données à partir de tables spécifiées dynamiquement dans des procédures stockées ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-05 22:50:03989parcourir

How to Retrieve Data from Dynamically Specified Tables in Stored Procedures?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn