sql >> Database teknologi >  >> RDS >> Mysql

mysql lagret procedure, der kalder sig selv rekursivt

det virker kun i mysql version>=5

den lagrede procedure-erklæring er denne,

du kan give det lidt forbedring, men det virker :

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 ;

kaldet er ligesom (det er vigtigt at indstille denne variabel):

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

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


  1. Sådan indsætter du flere rækker i en enkelt SQL-forespørgsel – Ugens interviewspørgsmål #069

  2. Hvordan Group_Concat() virker i SQLite

  3. hvordan man ændrer dato til tid i oracle 10g

  4. Korrekt persisterede beregnede kolonner