【发布时间】: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 行