【问题标题】:MySQL Routine not assigning value to variable?MySQL例程没有为变量赋值?
【发布时间】: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

标签: mysql stored-procedures


【解决方案1】:

您需要在调用您的程序 :SELECT @names 后阅读 @names。或者,如果您希望程序输出它,请在 SP 的主体中执行 SELECT names(紧跟在 SET names .... 之后)

【讨论】:

  • 是的。当我选择它时,@names 的值就是“name3”。
  • @ieeehh:对不起,我没有仔细阅读您的问题,我以为您从 SP 中返回值时遇到了问题……看来您已经找出了罪魁祸首。
猜你喜欢
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2012-07-23
  • 2020-02-01
  • 1970-01-01
相关资源
最近更新 更多