MySQL存储函数SELECT INTO意外结果

时间:2013-02-14 22:46:48

标签: mysql

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

'#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

我在这里做错了什么?

2 个答案:

答案 0 :(得分: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

在你的功能中,你得到了所有的桌面记录。

答案 1 :(得分: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