【发布时间】:2012-02-04 17:18:03
【问题描述】:
我有一张表a,其中包含以下列:
身份证号name
a_id
其中 a_id 是另一个 a 行的 id。
假设我有 3 行具有以下值:
1, 'name1', 空
2, 'name2', 1
3, 'name3', 2
好的,现在我想创建一个返回以下字符串的存储过程:
“名称 3|名称 2|名称 1”
或者,一般来说,每行的 name 值引用另一行,直到没有其他引用(由 | 字符分隔)。
以下代码有什么问题?
分隔符 $$ CREATE PROCEDURE 链(IN init_name VARCHAR(100),OUT 名称 VARCHAR(1000)) 开始 DECLARE next_id INT 默认 0; DECLARE curr_id INT 默认 0; /* 以防万一 */ DECLARE n VARCHAR(100) 默认 ""; 设置 n = 初始化名称; 选择 a_id INTO next_id 从一个 WHERE `名称`=n; 设置名称 = n; WHILE next_id NULL DO 设置 curr_id=next_id; /* 再次,以防万一 */ 选择“名称”,a_id INTO n,next_id 从一个 哪里 id=curr_id; SET 名称 = CONCAT(名称,“|”,n); 结束; 结束$$CALL chain('name3', @names) 只输出“name3”
【问题讨论】:
-
我刚刚想通了。对不起各位,新手误区。而不是测试 next_id NULL,你必须测试 next_id is not null