where语句在存储过程中不起作用

时间:2014-07-11 14:55:41

标签: mysql

所以我有这个存储过程:

DELIMITER $$

CREATE DEFINER=`admin`@`%` PROCEDURE `GetGoalDetail`(IN goalId int)
    DETERMINISTIC
BEGIN

SELECT *
FROM actions  
Where GoalId = goalId;

Select * From contributors 
where GoalId = goalId;

Select * From discussions 
where GoalId = goalId;
END

当我打电话给他时:

CALL 'GetGoalDetail`(15);

我希望看到与goalId = 15相关的所有内容。但是第二个查询总是会返回所有贡献者!为什么是这样?是否有一些我失踪了?

1 个答案:

答案 0 :(得分:4)

您的参数名称与您的表字段名称相同,这意味着MySQL不使用您的参数:

CREATE DEFINER=`admin`@`%` PROCEDURE `GetGoalDetail`(IN goalId int)
                                                        ^^^^^^----this

SELECT *
FROM actions  
Where GoalId = goalId;
      ^^^^^----^^^^^^--- which of those two is the field, and which is the parameter?

由于mysql无法知道您正在尝试fieldname = parameter,因此它只是将其解释为fieldname = fieldname,或者根本没有将where子句解释。

尝试将您的参数重命名为其他内容,这在您的任何表格中都不存在,例如“foobar”或其他任何内容。