MySQL例程没有为变量赋值?

时间:2012-01-07 02:53:00

标签: mysql stored-procedures

我有一张表a,其中包含以下列:
ID
name
A_ID

其中a_id是另一个a行的ID。

假设我有3行,其中包含以下值:
1,'name1',null
2,'name2',1
3,'name3',2

好的,现在我想创建一个返回以下字符串的存储过程: “NAME3 |名2 |名1” 或者,通常,引用另一行的每一行的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',@ name)只输出“name3”

1 个答案:

答案 0 :(得分:0)

您需要在调用过程后阅读@names:SELECT @names。或者如果您想要输出过程,请在SP正文中SELECT names之后SET names ....