Maison > base de données > tutoriel mysql > Comment capturer la sortie des requêtes dynamiques dans les paramètres OUT dans les procédures stockées MySQL ?

Comment capturer la sortie des requêtes dynamiques dans les paramètres OUT dans les procédures stockées MySQL ?

Susan Sarandon
Libérer: 2024-12-21 18:15:11
original
674 Les gens l'ont consulté

How to Capture Output of Dynamic Queries into OUT Parameters in MySQL Stored Procedures?

Sortie des résultats de requête vers des variables dans des procédures stockées avec des requêtes dynamiques

Les requêtes dynamiques offrent une flexibilité dans la programmation de bases de données. Dans MySQL, il est possible de générer des requêtes dynamiques au sein de procédures stockées et de les exécuter pour obtenir des résultats. Cependant, une question courante se pose : comment capturer le résultat de telles requêtes dans les paramètres OUT d'une procédure stockée ?

Considérez l'exemple suivant dans lequel une requête dynamique est construite pour compter les enregistrements (requête1) et récupérer des données (requête2 ):

CREATE PROCEDURE 'searchInvoice'
(
  OUT numOfRecords INT
)
BEGIN
  DECLARE query1 TEXT; 
  DECLARE query2 TEXT; 

 SET query1 = 'SELECT COUNT(*) bla bla bla.....'; 
 // Query1 to select the count of matching tuples..

 SET query2 = 'SELECT * from bla bla bla....';
 // Query2 to select original records...

 // later part of this both queries generate dynamically according to some IN parameters..

 // now I wanna assign the output of the query1 into numOfRecords 
 // and I wanna execute the query2 as well.. like this

    SET @Sql = query2;        
    PREPARE STMT FROM @Sql; 
    EXECUTE STMT; 
    DEALLOCATE PREPARE STMT;

 // output of the query2 can be read in PHP

END
Copier après la connexion

Pour résoudre ce problème, nous pouvons utiliser une approche modifiée comme illustré ci-dessous :

CREATE TABLE table1(
  column1 VARCHAR(255) DEFAULT NULL,
  column2 VARCHAR(255) DEFAULT NULL,
  column3 VARCHAR(255) DEFAULT NULL
);

INSERT INTO table1 VALUES 
  ('1', 'value1', 'value2'),
  ('2', 'value3', 'value4');

DELIMITER $$
CREATE PROCEDURE procedure1(IN Param1 VARCHAR(255), OUT Param2 VARCHAR(255), OUT Param3 VARCHAR(255))
BEGIN
  SET @c2 = '';
  SET @c3 = '';
  SET @query = 'SELECT column2, column3 INTO @c2, @c3 FROM table1 WHERE column1 = ?';
  PREPARE stmt FROM @query;
  SET @c1 = Param1;
  EXECUTE stmt USING @c1;
  DEALLOCATE PREPARE stmt;
  SET Param2 = @c2;
  SET Param3 = @c3;
END$$
DELIMITER ;

-- Call procedure and use variables
SET @Param1 = 2;
SET @Param2 = '';
SET @Param3 = '';
CALL procedure1(@Param1, @Param2, @Param3);
SELECT @Param2, @Param3;
Copier après la connexion

Cette méthode initialise les variables (@c2 et @c3) pour conserver la sortie de la requête dynamique et construit la requête (@query) pour remplir ces variables avec les données de la base de données. La requête est ensuite préparée, exécutée avec le paramètre spécifié, et les résultats sont affectés aux paramètres OUT (Param2 et Param3) avant de quitter la procédure.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal