在 mysql 数据库中,我有一个名为“usertest”的表,其中存储了一些用户信息。我成功地创建了一个名为“getId”的 UDF。这是它的创建方式:
create function getId(name varchar(255))
returns int
begin
declare id_found int;
set id_found=(select Id from usertest where Name=name);
return id_found;
end
应该没问题,但是,当我调用
select getId('mike');
mysql引擎报错:
Subquery returns more than 1 row.
但是在表 usertest 中我只有一行 Name='mike'。那是有线的。有人可以告诉我为什么吗?提前谢谢你:)
最佳答案
列名和变量不区分大小写,所以 Name
和 name
是一回事。它不是将 Name
列与 name
变量进行比较,而是将 name
变量与其自身进行比较,因此它始终为真。
为函数参数使用不同的名称。
create function getId(name_param varchar(255))
returns int
begin
declare id_found int;
set id_found=(select Id from usertest where Name=name_param);
return id_found;
end
或使用表名前缀。
create function getId(name varchar(255))
returns int
begin
declare id_found int;
set id_found=(select Id from usertest where usertest.Name=name);
return id_found;
end
参见 MySQL : When stored procedure parameter name is the same as table column name
关于mysql - 在mysql中调用一个存储函数,但是得到错误:Subquery returns more than 1 row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39060631/