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

就目前而言,您当前的参数与您要查询的列名完全相同,因此

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 回答