Mysql 过程返回空值
我写了一个简单的演示程序,下面是代码Mysql 过程返回空值,mysql,procedure,Mysql,Procedure,我写了一个简单的演示程序,下面是代码 delimiter // create procedure test2(IN boss int, out name varchar(50)) begin select Name into name from employee where Reports_to=boss; end // 当我将这个过程调用为calltest2(2,@name)时,它返回null 虽然表中有所有的值- mysql> select * from employee; +--
delimiter //
create procedure test2(IN boss int, out name varchar(50))
begin
select Name into name from employee where Reports_to=boss;
end //
当我将这个过程调用为calltest2(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 |
+--------+--------+--------+-------------+------------+
如果我写调用test2(1,@name)
它会显示错误
结果包含多行
如何解决这两个错误 以下查询失败,因为它不能为一个变量分配多个值:
select Name into name from employee where Reports_to=boss;
您需要的是类似于GROUP\u CONCAT
的东西,它将返回逗号分隔的值。请尝试以下操作:
SELECT GROUP_CONCAT(name) INTO names
FROM employee
WHERE reports_to = boss;
过程无法返回多个值,因此您需要将
LIMIT 1
添加到查询中,避免将变量或参数命名为列的名称。@Artem llchenko能否请您使用我试图添加LIMIT 1的语法进行指定,但它给出了错误..@Darshan Mehta它没有给出错误“结果包含多个值”但它仍然返回空值,请参见。。mysql>选择@name;+----+|@name |+----+| NULL |+----+更新了答案,立即重试?如果您的SQL语法有错误,则会显示错误;查看与您的MySQL服务器版本对应的手册,了解使用near'GROUP BY Emp_Id的正确语法;好的,删除了分组依据
。您是否可以尝试将name IS NOT NULL
添加到示例中,或者在CLI中尝试不带GROUP\u CONCAT
的查询并发布输出?如果不带GROUP\u CONCAT,则会出现错误“结果包含多个值”