У меня есть таблица a
со следующими столбцами:Я быname
a_id
где a_id - это идентификатор другой a
строки.
Предположим, у меня есть 3 строки со следующими значениями:1, 'name1', ноль2, 'name2', 13, 'name3', 2
Хорошо, теперь я хочу создать хранимую процедуру, которая возвращает следующую строку: «name3 | name2 | name1» или, как правило, значение name
каждой строки, которая ссылается на другую строку, пока не будетнет другой ссылки (разделенной символом |).
Что не так со следующим кодом?
DELIMITER $$
CREATE PROCEDURE chain (IN init_name VARCHAR(100), OUT names VARCHAR(1000))
BEGIN
DECLARE next_id INT default 0;
DECLARE curr_id INT default 0; /* Just in case */
DECLARE n VARCHAR(100) default "";
SET n = init_name;
SELECT a_id
INTO next_id
FROM a
WHERE `name`=n;
SET names = n;
WHILE next_id <> NULL DO
SET curr_id=next_id; /* Again, just in case */
SELECT `name`, a_id
INTO n, next_id
FROM a
WHERE id=curr_id;
SET names = CONCAT(names, "|", n);
END WHILE;
END$$
Цепочка CALL ('name3', @names) просто выводит "name3"