56,677
社区成员
发帖
与我相关
我的任务
分享
-- 检查任务依赖是否有回路
DROP PROCEDURE IF EXISTS check_loop;
CREATE PROCEDURE check_loop (in_task_id INT, in_task_pid INT, OUT out_status TINYINT)
BEGIN
DECLARE _task_id INT;
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT task_pid FROM t_task_link WHERE task_id = in_task_pid;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop : LOOP
FETCH cur INTO _task_id;
IF in_task_id = _task_id THEN
SET out_status = 1;
SET done = TRUE;
END IF;
IF done THEN
LEAVE read_loop;
END IF;
CALL check_loop (in_task_id, _task_id, @out_status);
END LOOP;
CLOSE cur;
END;
DROP PROCEDURE IF EXISTS exists_loop;
CREATE PROCEDURE exists_loop (in_task_id INT, in_task_pid INT)
BEGIN
SET @@max_sp_recursion_depth = 255;
CALL check_loop (in_task_id, in_task_pid, @out_status);
SELECT IFNULL(@out_status, 0);
END;