【问题标题】:procedure returns null value过程返回空值
【发布时间】:2017-08-29 10:39:14
【问题描述】:

我写了一个简单的demo程序,下面是代码

delimiter //
create procedure test2(IN boss int, out name varchar(50))
begin
select Name into name  from employee where Reports_to=boss;
end //

当我将此过程称为 CALL test2(2,@name) 时,它返回 null

虽然表格包含所有值 -

mysql> select * from employee;
+--------+--------+--------+-------------+------------+
| Emp_Id | Name   | Salary | Department  | Reports_to |
+--------+--------+--------+-------------+------------+
|      1 | Alok   |  50000 | RnD         |       NULL |
|      2 | Mahesh |  40000 | Development |          1 |
|      3 | Ramesh |  40000 | Development |          1 |
|      4 | Bimal  |  30000 | Sales       |          2 |
|      5 | Javed  |  20000 | Marketing   |          4 |
|      6 | Mukesh |  35000 | Accounts    |          3 |
+--------+--------+--------+-------------+------------+

如果我写CALL test2(1,@name) 也会显示错误

结果包含多行

如何解决这两个错误...??

【问题讨论】:

  • 程序无法返回多个值,因此您需要将LIMIT 1 添加到您的查询中
  • 避免将变量或参数命名为列名。
  • @Artem llchenko 能否请您指定我尝试添加限制 1 但它给出错误的语法..??

标签: mysql procedure


【解决方案1】:

以下查询失败,因为它不能为一个变量分配多个值:

select Name into name  from employee where Reports_to=boss;

你想要的是类似GROUP_CONCAT 的东西,它会返回逗号分隔的值。请尝试以下操作:

SELECT GROUP_CONCAT(name) INTO names
FROM employee
WHERE reports_to = boss;

【讨论】:

  • @Darshan Mehta 它没有给出错误“结果包含多个值”但它仍然返回 NULL 看到这个..mysql> select @name; +--------+ | @姓名 | +--------+ |空 | +-------+
  • 更新了答案,现在试试?
  • 它给出了错误你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'GROUP BY Emp_Id; 附近使用的正确语法;
  • 好的,删除 GROUP BY。您可以尝试将 name IS NOT NULL 添加到示例中,还是仅在 CLI 中尝试不使用 GROUP_CONCAT 的查询并发布输出?
  • 没有 GROUP_CONCAT 会给出错误“结果包含多个值”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 2015-04-19
  • 2017-07-01
  • 2018-06-09
相关资源
最近更新 更多