如何防止存储过程中的递归限制

时间:2014-12-29 07:30:42

标签: mysql sql stored-procedures recursion

我需要一些帮助,我有问题,我怎么能防止这种情况不能得到递归限制SQL ERROR(1456)。有没有办法改变这个SP不要使用递归...什么我想要实现的是在给定的parentid上总结我左边子树中的所有数量...例如我有5个,所以我的左边是7所以我想在他的子树上总结它的所有金额(22,500)如果我没错的话。

提前谢谢。

我有这个表结构

CREATE TABLE `mytree` (
    `parentid` INT(11) NOT NULL,
    `memberid` INT(11) NOT NULL,
    `position` CHAR(1) NOT NULL,
    `amount` DECIMAL(10,2) NOT NULL,
    UNIQUE INDEX `ck1tree` (`memberid`),
    UNIQUE INDEX `ck2tree` (`parentid`, `position`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
;

这是mytree表格中的数据

INSERT INTO `mytree` (`parentid`, `memberid`, `position`, `amount`) VALUES
    (8, 27, 'R', 0.00),
    (8, 28, 'L', 0.00),
    (24, 26, 'R', 0.00),
    (0, 1, '', 5500.00),
    (24, 25, 'L', 0.00),
    (21, 24, 'L', 500.00),
    (21, 23, 'R', 0.00),
    (18, 20, 'R', 1500.00),
    (18, 19, 'L', 0.00),
    (15, 18, 'R', 2000.00),
    (15, 17, 'L', 0.00),
    (13, 16, 'L', 0.00),
    (13, 15, 'R', 2500.00),
    (12, 14, 'R', 0.00),
    (12, 13, 'L', 3000.00),
    (10, 12, 'R', 3500.00),
    (10, 11, 'L', 0.00),
    (7, 10, 'R', 4000.00),
    (7, 9, 'L', 0.00),
    (5, 8, 'R', 500.00),
    (5, 7, 'L', 4500.00),
    (1, 6, 'R', 0.00),
    (1, 5, 'L', 5500.00),
    (20, 22, 'R', 0.00),
    (20, 21, 'L', 1000.00);






CREATE DEFINER=`root`@`localhost` PROCEDURE `sum_left_amount`(IN `p_memid` INT, OUT `tot_left_amount` DECIMAL(10,2))
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
   DECLARE a decimal(10,2);
    DECLARE m int;
    DECLARE s decimal(10,2);

    select memberid, amount into m, a from mytree
    where parentid = p_memid and position = 'L';

    call sum_left_amount(m,s);
    set tot_left_amount = a + s;

END

0 个答案:

没有答案
相关问题