Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица описывающая все каталоги, в ней есть столбцы ID_Cat-идентификатор каталога, и ID_Parent-идентификатор родителя этого каталога. Необходимо написать хранимку которая будет удалять каталог по заданному ID_Cat со всеми подкаталогами.
Пытался реализовать через еще одну таблицу в которую заносятся id каталога который необходимо удалить и его lvlC вложенности, при этом ID_Cat поданный на вход процедуре lvlC=0, каждый следующий уровень вложенности lvlC+1.
CREATE DEFINER = 'root'@'localhost'
PROCEDURE filesystem.TR11(IN id_c VARCHAR(255))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE lvl INT;
DECLARE a INT;
DECLARE cur1 CURSOR FOR SELECT id
FROM
TT
WHERE
lvlC = lvl-1;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
CREATE TABLE TT
(
id INT PRIMARY KEY,
lvlC INT
);
SET lvl = 0;
INSERT INTO TT (id, lvlC) VALUES (id_c, lvl);
SET lvl = lvl + 1;
SET a = id_c;
WHILE EXISTS (SELECT ID_Cat
FROM
catalog, TT
WHERE
catalog.ID_Parent = a
AND TT.lvlC = lvl-1)
DO
OPEN cur1;
REPEAT
FETCH cur1 INTO a;
IF NOT done THEN
INSERT INTO TT (id, lvlC) VALUES (
(SELECT ID_Cat
FROM
catalog
WHERE
catalog.ID_Parent = a), lvl);
END IF;
UNTIL done
END REPEAT;
SET lvl = lvl + 1;
CLOSE cur1;
END WHILE;
DELETE
FROM
filesystem.catalog
WHERE
ID_Cat = (SELECT id
FROM
TT);
DROP TABLE TT;
END
Она работает но удаляет только каталог поданный на вход Процедуре.
Как это еще можно реализовать??
Неактивен