【问题标题】:How to return multiple rows using Stored Procedure如何使用存储过程返回多行
【发布时间】:2015-12-05 12:16:49
【问题描述】:

我是存储过程的新手。我写了一个查询来获取多行。但我收到了类似

的错误

错误代码:1172。结果包含多行。

我应该使用 CURSOR 类型吗?

这是我的查询和表结构。

我的表结构是:

+---+------+------+---------+
|id | name | class| section |
+---+------+------+---------+
|1  |abc   |5     | A       |
|2  |cdef  |5     | B       |
|3  |hikl  |5     | A       |
|4  |xyz   |5     | A       |
+---+------+------+---------+

我的存储过程查询是

CREATE DEFINER=`root`@`localhost` PROCEDURE `mulitiOut`(out namee VARCHAR(50))
BEGIN
select name into @namee from mytable where section = A;
END

如何返回与 A 部分相关的所有名称。

【问题讨论】:

  • 您不能在一个变量中存储多条记录。只需选择而不将任何内容放入变量中
  • @juergend:如何使用得到的数据。我想对数据进行一些计算。

标签: mysql stored-procedures


【解决方案1】:

您可以直接从过程中返回结果集:

CREATE DEFINER=`root`@`localhost` PROCEDURE `mulitiOut`()
BEGIN
 SELECT name FROM mytable WHERE section = A;
END

【讨论】:

    【解决方案2】:

    试试GROUP_CONCAT函数-

    SELECT GROUP_CONCAT(name) INTO @namee FROM mytable WHERE section = A;
    

    作为一种解决方法 - 创建并填充另一个表 -

    INSERT INTO temp_table(name) SELECT name FROM mytable WHERE section = A;
    

    【讨论】:

    • 在上面的查询中,namee VARCHAR(50) 没问题,或者我应该做任何更改吗??
    • 当然,如果需要,你应该增加这个长度。顺便说一句,GROUP_CONCAT 函数也是有限的,1024 - 是默认长度。
    • 是的,但是我将所有结果都放在一列本身..但我需要按行排列!
    • 如果您需要一个值 - 使用 GROUP_CONCAT;只记得限制。
    • 一列中的所有名称都以逗号分隔。但我需要,因为每个名称都应该在不同的行中。。
    猜你喜欢
    • 2015-11-04
    • 2014-08-31
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    相关资源
    最近更新 更多