我的第一个 MySQL 函数有问题。一个接一个地出现错误
Posted
技术标签:
【中文标题】我的第一个 MySQL 函数有问题。一个接一个地出现错误【英文标题】:Problem with my first MySQL Function. Getting one error after the other 【发布时间】:2011-04-23 19:47:13 【问题描述】:所以,我正在制作我的第一个 mysql 函数。
BEGIN
DECLARE ID INT;
SELECT
LandID INTO ID
FROM
Landen
WHERE
Landnaam = landnaam;
RETURN ID;
END
参数是一个varchar。
所以,假设我在Landen
中获得了Landnaam
'Nederland' 的记录。
我运行我的函数,将“Nederland”作为参数。 但随后它给了我以下错误:
1172 - 结果包含多于一行
这根本没有意义。因为当我提供一些不在我的数据库中的参数时,比如“ASDASD”,我得到了同样的错误。 当用
限制结果时LIMIT 1
它总是返回 1。
我做错了什么?
【问题讨论】:
如果landnaam 是一个varchar,你必须将它作为它传递。这意味着:WHERE Landnaam = 'landnaam' 我这样做了,然后它只返回 null,无论我输入什么。是的,我非常确定我尝试作为参数的东西在数据库中。 去掉where子句试试 这会破坏函数的整个目的。因为我想获取参数的ID。但是,是的,我再次收到 1172 错误。 哦,我想我明白了。您正在尝试将超过 1 行的内容存储到 ID var 中。那是不可能的,所以 where 过滤选择超过 1 行。因此,Landen 表中有超过 1 行包含 Landnaam 字段,即landnaam 词。尝试向 where 子句添加更多条件,使其仅返回 1 行 【参考方案1】:drop function if exists myfunc;
delimiter //
create function myfunc(str varchar(50))
returns int
reads sql data
begin
declare id int;
select landid into id from Landen where landnaam = str limit 1;
return id;
end//
delimiter ;
select myfunc('nederland');
【讨论】:
我不知道这个查询与我的不同,但它可以工作。 Limit 在我尝试时只给了我 1,无论我作为参数给出什么。无论如何,非常感谢你,我现在可以继续了:) 完成 :) 对不起,我第一次在这里发布任何东西:P 没问题。我告诉你是因为你是一个新用户,我假设你不知道它经常发生。谢谢:)以上是关于我的第一个 MySQL 函数有问题。一个接一个地出现错误的主要内容,如果未能解决你的问题,请参考以下文章