Maison >base de données >tutoriel mysql >Comment stocker les résultats d'une requête SQL dynamique dans une variable de procédure stockée MySQL ?

Comment stocker les résultats d'une requête SQL dynamique dans une variable de procédure stockée MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-30 21:46:17988parcourir

How to Store Dynamic SQL Query Results in a MySQL Stored Procedure Variable?

Stockage de la sortie d'une requête SQL dynamique dans une variable à l'aide de procédures stockées MySQL

Dans les procédures stockées MySQL, il est parfois nécessaire d'exécuter requêtes dynamiques et stocker la sortie dans une variable définie par l'utilisateur. Voici comment y parvenir :

CREATE PROCEDURE procedure_name(
  IN query_text TEXT,
  OUT output_variable TEXT
)
BEGIN
  SET output_variable = '';

  SET @sql = query_text;
  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END

Dans cette procédure, nous déclarons un paramètre d'entrée query_text qui contient la requête dynamique à exécuter, et un paramètre de sortie output_variable qui stockera la sortie de la requête.

Nous définissons ensuite la variable_sortie sur une chaîne vide et préparons le texte_requête en tant qu'instruction SQL à l'aide de la commande PREPARE. L'instruction EXECUTE est utilisée pour exécuter l'instruction préparée, et DEALLOCATE PREPARE est utilisée pour libérer les ressources qui lui sont associées.

Exemple :

Disons que nous avons une dynamique requête qui génère la sortie suivante :

SELECT CONCAT('Value 1: ', value1, ' | ', 'Value 2: ', value2) AS output
FROM table_name
WHERE id = ?

Nous pouvons créer une procédure pour exécuter cette requête et stocker la sortie dans un variable :

CREATE PROCEDURE get_dynamic_output(
  IN input_id INT,
  OUT dynamic_output TEXT
)
BEGIN
  SET dynamic_output = '';

  SET @query = 'SELECT CONCAT('"'Value 1: '"', value1, '"" | '"', 'Value 2: '"', value2, '""') AS output FROM table_name WHERE id = ?';
  PREPARE stmt FROM @query;
  SET @id = input_id;
  EXECUTE stmt USING @id;
  DEALLOCATE PREPARE stmt;
END

Pour utiliser cette procédure, nous pouvons définir le paramètre input_id sur la valeur souhaitée et l'exécuter :

CALL get_dynamic_output(1, @output_value);
SELECT @output_value;

Cela imprimera la sortie de la requête dynamique sous forme de chaîne de texte unique.

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