3

関数の実行中にエラーが発生する理由が何であるかわかりません

ここに私のSQLがあります:

    CREATE FUNCTION `test`.`GetProcessorMethodID` (processor_id INT, method_id INT)
RETURNS INTEGER
BEGIN
    DECLARE id INT;
    SET @id := (SELECT `processor_method_id` FROM `processor_method` WHERE `processor_id` = processor_id AND `method_id` = method_id);
RETURN @id;
END

ここに画像の説明を入力

しかし、このSQL行を使用すると

    SELECT processor_method_id FROM test.processor_method
WHERE processor_id = 1 AND method_id = 2;

ここに画像の説明を入力

それは正常に動作します!. それは与えますが、私が取得したい期待値です。しかし、私の関数では、期待値が返されず、常にエラーが発生し、何が問題なのかわかりません

4

2 に答える 2

8

あなたの問題は実際には非常に単純であり、将来的には間違いなく覚えているでしょう...パラメータ名を...processor_id、method_idからparmProcessor、parmMethodのようなものに変更してください

ITスタンドとして、現在のパラメータは、クエリしている列名とまったく同じ名前であるため、

where `processor_id` = processor_id (same with method)

どちらも実際の列名を参照しており、1 = 1日中、2 = 2は同じであるため、すべてのレコードを取得しています。

上記のサンプルのように少し異なるものに変更すると、次のようになります。

where `processor_id` = parmProcessor and `method_id` = parmMethod

これは、クエリでの明示的に異なる意味です。

于 2012-11-28T01:31:08.427 に答える
1

クエリ

SET @id := (SELECT `processor_method_id` FROM `processor_method` WHERE `processor_id` = processor_id AND `method_id` = method_id);

おそらく、processor_method_id に対して複数のレコードを返す可能性があります。これが、サブクエリが複数の行を返すと言っている理由です。データの選択方法に応じて、LIMIT句を使用できます。

したがって、次のようになります。

SET @id := (SELECT `processor_method_id` FROM `processor_method` WHERE `processor_id` = processor_id AND `method_id` = method_id LIMIT 1);
于 2012-11-28T00:29:43.443 に答える