2013-02-14 101 views
0

我想在mysql 5.1中编写一个存储函数,它返回给定房间的值'AccountIDref'。如果我只查询这个工作的内部SELECT语句(返回空间值)。但调用函数我得到的回应:MySQL存储函数SELECT INTO意外的结果

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

我在做什么错在这里?

+0

啊忘记了:例子被简化了,但在这种情况下不应该有多于一行。我有印象,WHERE子句只是被忽略...... – Alex 2013-02-14 22:52:28

回答

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 
+0

Meeeh没有帮助。现在我得到第一个表项的ID作为结果。 – Alex 2013-02-14 23:18:51

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 

在你的函数你获得所有表中的记录。