首頁  >  文章  >  資料庫  >  MySQL中的遞歸預存程序如何計算數量層次結構?

MySQL中的遞歸預存程序如何計算數量層次結構?

DDD
DDD原創
2024-10-31 22:22:28236瀏覽

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

用於計算數量層次結構的遞歸預存程序

在像所介紹的需要分層計算的情況下,MySQL 中的遞歸預存程序可以提供有效的解決方案。

對於給定的表,其中數量列表示商品的數量,parent_id 列表示其父商品,可以設計一個存儲過程來遞歸計算商品的總數量給定項目,考慮其在層次結構中的所有祖先。

預存程序宣告

以下MySQL 預存程序定義允許遞迴呼叫並計算總量:

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 ;

在此預存程序中,number參數表示要計算總數量的商品ID,total輸出參數保存計算結果。

呼叫預存程序

要使用預存程序,設定以下遞迴深度的會話變數至關重要:

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

設定這些變數後,預存程序可以使用以下語句呼叫:

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

以上是MySQL中的遞歸預存程序如何計算數量層次結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn