1

我正在尝试在 mysql 5.1 中编写一个存储函数,该函数返回给定房间的值“AccountIDref”。如果我只查询内部的 SELECT 语句,这可行(返回房间的值)。但是调用该函数我得到了响应:

'#1172 - 结果包含多于一行'

CREATE FUNCTION getAccountId (room INT) RETURNS INT
BEGIN
    DECLARE refID INT DEFAULT NULL;
    SELECT AccountIDref INTO refID FROM Allocation
    WHERE Room = room;
    RETURN refID;
END

我在这里做错了什么?

4

2 回答 2

1

字段名称和参数名称必须不同 -

CREATE FUNCTION getAccountId (room_param INT) RETURNS INT
BEGIN
    DECLARE refID INT DEFAULT NULL;
    SELECT AccountIDref INTO refID FROM Allocation
    WHERE Room = room_param;
    RETURN refID;
END

在您的函数中,您将获取所有表记录。

于 2013-02-15T07:12:59.023 回答
0

我要建议的内容与您所拥有的内容不会有太大不同,但是我对where下一行中的子句持怀疑态度,并且让我们使用它limit 1来明确设置限制。

尝试这个 :

CREATE FUNCTION getAccountId (room INT) RETURNS INT
BEGIN
    DECLARE refID INT DEFAULT NULL;
    SELECT AccountIDref INTO refID FROM Allocation WHERE Room = room LIMIT 1;
    RETURN refID;
END
于 2013-02-14T23:09:54.277 回答