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 ?
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
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;
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!