我注意到我的存储过程中的select语句总是返回相同的值,无论我用什么参数调用我的存储过程。这是代码:
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$$
x总是返回相同的值,无论我调用哪个id测试。我注意到x的值始终是我Paper表第一行中paper_id的值。
但是,如果我在存储过程之外运行相同的查询,我会得到预期的值。
存储过程中出现什么问题会导致该值出现偏差?
答案 0 :(得分:6)
我对MySQL的存储过程并不熟悉,但可能是表达式WHERE ID = id
被评估为“Paper中的所有行,其中列ID中的值等于列ID中的值”,并且只是忽略你的参数?
尝试将参数重命名为与查询中的列名不同的内容。