mysql存储过程以递归方式调用自身
我有下表:
id | parent_id | quantity-------------------------
1 | null | 5
2 | null | 3
3 | 2 | 10
4 | 2 | 15
5 | 3 | 2
6 | 5 | 4
7 | 1 | 9
现在,我需要一个mysql中的存储过程,该存储过程以递归方式调用自身并返回计算出的数量。例如,id
6有5个父级,而3个父级又有2个父级。因此,我需要计算4 * 2 * 10 * 3
(= 240)作为结果。
我对存储过程还很陌生,将来我不会经常使用它们,因为我更喜欢在程序代码中而不是在数据库中使用业务逻辑。但是在这种情况下,我无法避免。
也许mysql专家(就是您)可以在几秒钟内破解一条工作语句。
回答:
其工作仅在mysql版本> = 5中
存储过程声明是这个,
您可以给它一点点改善,但是可以这样工作:
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 ;
调用就像(设置此变量很重要):
SET @@GLOBAL.max_sp_recursion_depth = 255;SET @@session.max_sp_recursion_depth = 255;
CALL calctotal(6, @total);
SELECT @total;
以上是 mysql存储过程以递归方式调用自身 的全部内容, 来源链接: utcz.com/qa/404254.html