Maison > base de données > tutoriel mysql > Comment récupérer la sortie des requêtes dynamiques dans les procédures stockées MySQL ?

Comment récupérer la sortie des requêtes dynamiques dans les procédures stockées MySQL ?

Mary-Kate Olsen
Libérer: 2024-12-17 16:51:11
original
689 Les gens l'ont consulté

How to Retrieve Output from Dynamic Queries within MySQL Stored Procedures?

Exécuter des requêtes dynamiques et récupérer le résultat dans les procédures stockées MySQL

Dans MySQL, les procédures stockées vous permettent d'effectuer efficacement des opérations complexes. Un scénario courant consiste à générer dynamiquement des requêtes basées sur des paramètres d'entrée et à récupérer le résultat dans une variable.

Pour y parvenir, vous pouvez utiliser des instructions préparées et des paramètres de sortie. Considérons la procédure stockée suivante :

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écupérer la sortie de query1 dans le paramètre numOfRecords, vous pouvez utiliser l'approche suivante :

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

Dans cet exemple :

  1. Les instructions SET @c2 = '' et SET @c3 = '' initialisent la sortie paramètres.
  2. L'instruction SET @query = 'SELECT ...' prépare la requête de manière dynamique.
  3. L'instruction SET @c1 = Param1 attribue le paramètre d'entrée à la requête.
  4. L'instruction EXECUTE stmt USING @c1 exécute la requête préparée.
  5. L'instruction DEALLOCATE PREPARE stmt libère les ressources de l'instruction préparée.
  6. Les instructions SET Param2 = @c2 et SET Param3 = @c3 attribuent les valeurs de sortie aux paramètres.
  7. Enfin, l'instruction SELECT @Param2, @Param3 récupère les valeurs de sortie.

En utilisant cette technique, vous pouvez récupérer la sortie d'une requête générée dynamiquement dans une variable dans un fichier MySQL stocké. 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