1

特定の部屋の値「AccountIDref」を返すストアド関数を mysql 5.1 で作成しようとしています。内部の 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 に答える