Maison  >  Article  >  base de données  >  Comment une procédure stockée récursive dans MySQL peut-elle calculer la hiérarchie des quantités ?

Comment une procédure stockée récursive dans MySQL peut-elle calculer la hiérarchie des quantités ?

DDD
DDDoriginal
2024-10-31 22:22:28232parcourir

How Can a Recursive Stored Procedure in MySQL Calculate Quantity Hierarchy?

Procédure stockée récursive pour le calcul de la hiérarchie des quantités

Dans des situations comme celle présentée, où des calculs hiérarchiques sont requis, une procédure stockée récursive dans MySQL peut fournir une solution efficace.

Pour la table donnée, où la colonne quantité représente la quantité d'un article et la colonne parent_id indique son article parent, une procédure stockée peut être conçue pour calculer de manière récursive la quantité totale pour un élément donné, en considérant tous ses ancêtres dans la hiérarchie.

Déclaration de procédure stockée

La définition de procédure stockée MySQL suivante permet un appel récursif et calcule la quantité totale :

DELIMITER $$

CREATE PROCEDURE calctotal(
   IN number INT,
   OUT total INT
)

BEGIN

   DECLARE parent_ID INT DEFAULT NULL ;
   DECLARE tmptotal INT DEFAULT 0;
   DECLARE tmptotal2 INT DEFAULT 0;

   SELECT parentid   FROM test   WHERE id = number INTO parent_ID;   
   SELECT quantity   FROM test   WHERE id = number INTO tmptotal;     

   IF parent_ID IS NULL
    THEN
    SET total = tmptotal;
   ELSE     
    CALL calctotal(parent_ID, tmptotal2);
    SET total = tmptotal2 * tmptotal;   
   END IF;

END$$

DELIMITER ;

Dans cette procédure stockée, le paramètre numérique représente l'ID de l'article pour lequel la quantité totale doit être calculée, et le paramètre de sortie total contient le résultat calculé.

Appel de la procédure stockée

Pour utiliser la procédure stockée, il est crucial de définir les variables de session suivantes pour la profondeur de récursion :

SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255;

Après avoir défini ces variables, la procédure stockée peut être invoqué à l'aide de la déclaration suivante :

CALL calctotal(6, @total);
SELECT @total;

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