Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Prosedur Tersimpan Rekursif dalam MySQL Mengira Hierarki Kuantiti?

Bagaimanakah Prosedur Tersimpan Rekursif dalam MySQL Mengira Hierarki Kuantiti?

DDD
DDDasal
2024-10-31 22:22:28232semak imbas

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

Prosedur Tersimpan Rekursif untuk Hierarki Kuantiti Pengkomputeran

Dalam situasi seperti yang dibentangkan, di mana pengiraan hierarki diperlukan, prosedur tersimpan rekursif dalam MySQL boleh memberikan penyelesaian yang cekap.

Untuk jadual yang diberikan, di mana lajur kuantiti mewakili kuantiti item dan lajur parent_id menunjukkan item induknya, prosedur tersimpan boleh dibuat untuk mengira secara rekursif jumlah kuantiti untuk sesuatu item yang diberikan, dengan mengambil kira semua nenek moyangnya dalam hierarki.

Pengisytiharan Prosedur Tersimpan

Takrifan prosedur tersimpan MySQL berikut membenarkan panggilan rekursif dan mengira jumlah kuantiti:

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 ;

Dalam prosedur tersimpan ini, parameter nombor mewakili ID item yang mana jumlah kuantiti akan dikira dan jumlah parameter output memegang hasil yang dikira.

Memanggil Prosedur Tersimpan

Untuk menggunakan prosedur tersimpan, adalah penting untuk menetapkan pembolehubah sesi berikut untuk kedalaman rekursi:

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

Selepas menetapkan pembolehubah ini, prosedur tersimpan boleh dipanggil menggunakan pernyataan berikut:

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

Atas ialah kandungan terperinci Bagaimanakah Prosedur Tersimpan Rekursif dalam MySQL Mengira Hierarki Kuantiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn