sql >> Database >  >> RDS >> Mysql

mysql opgeslagen procedure die zichzelf recursief aanroept

het werkt alleen in mysql-versie>=5

de declaratie van de opgeslagen procedure is dit,

je kunt het een beetje verbeteren, maar dit werkt:

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 ;

de aanroep is als (het is belangrijk om deze variabele in te stellen):

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

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


  1. pg_restore Alternatieven - PostgreSQL-back-up en automatisch herstel met ClusterControl

  2. Een formulier maken op basis van een tabel in Access 2016

  3. Hoe de NCHAR()-functie werkt in SQL Server (T-SQL)

  4. postgres db-bestanden - welk bestand vertegenwoordigt de specifieke tabel/index?