我的第一个 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 函数有问题。一个接一个地出现错误的主要内容,如果未能解决你的问题,请参考以下文章

Java函数式编程:Lambda表达式

在 MySql 更新语句中使用函数

双链接列表java反向函数错误

如何一个接一个地调度两个异步 redux 动作?

尽可能快地获取我的 MySQL 的第一行(也在大表上)

mysql 函数中与Oracle中ltrim函数功能相同的函数是啥函数?