我有一张表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”
答案 0 :(得分:0)
您需要在调用过程后阅读@names:SELECT @names
。或者如果您想要输出过程,请在SP正文中SELECT names
之后SET names ....