Рекурсивная процедура MySql: как исправить бесконечный цикл - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь закодировать хранимую процедуру в MySql, чтобы удалить целое поддерево из древовидной структуры.

        CREATE PROCEDURE delete_with_children(IN node INT)
        BEGIN
            DECLARE child_id INT;
            DECLARE finished INT DEFAULT 0;
            DECLARE cur CURSOR FOR 
                SELECT id FROM nodes WHERE parent_id = node;
            DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

            DELETE from nodes where id = node;
            OPEN cur;
            WHILE(finished < 1) DO
                FETCH cur INTO child_id;
                CALL delete_with_children(child_id);
            END WHILE;
            CLOSE cur;
        END;

Она вставляется хорошо, но когда я пытаюсь выполнить ее с аргументом 4 для этой структуры https://imgur.com/a/kqW7ulS, я получаю такую ​​ошибку: для процедуры delete_with_children был превышен рекурсивный предел 100 (как установлено переменной max_sp_recursion_depth). Буду признателен, если кто-нибудь поможет мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...