2010-12-02 67 views
3

我注意到,我的存储过程中的select语句总是返回相同的值,无论我调用存储过程的参数是什么。代码如下:MySQL存储过程选择返回不正确的值

DELIMITER $$ 
CREATE PROCEDURE TEST(IN id INT) 
BEGIN 
    DECLARE x INT DEFAULT 0; 
    select id; 
    SELECT paper_id 
    INTO x 
    FROM Paper 
    WHERE ID = id 
    limit 1; 
    select x; 
END$$ 

无论我用什么ID进行测试,x总是返回相同的值。我注意到x的值始终是我的Paper表的第一行中的paper_id的值。

但是,如果我在存储过程之外运行相同的查询,我会得到期望的值。

存储过程内部出现什么问题会导致该值偏移?

回答

6

我对MySQL的存储过程并不熟悉,但可能是因为表达式WHERE ID = id被评估为“来自Paper的所有行,其中列ID中的值等于列ID中的值”并且完全忽略了您的参数?

尝试将参数重命名为与查询中的列名不同的内容。

+1

完全正确,我觉得现在真的很愚蠢哈哈哈 – 2010-12-03 00:41:19