MySQL Routine не присваивает значение переменной? - PullRequest
0 голосов
/ 07 января 2012

У меня есть таблица a со следующими столбцами:Я быnamea_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"

1 Ответ

0 голосов
/ 07 января 2012

Вам нужно прочитать @names после вызова вашей процедуры: SELECT @names.Или, если вы хотите, чтобы процедура выводила его, выполните SELECT names в теле SP (сразу после SET names ....)

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