sql中值未声明变量

watbbzwu  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(458)

我试图创建一个存储过程来获取表中的平均年龄,但是得到了一个未声明的变量错误。我的代码是:

DELIMITER //
CREATE PROCEDURE MedianAge()
BEGIN

SET @row_count = (SELECT COUNT(*) FROM employee);
SET @median_index = (@row_count/2);

SELECT  TIMESTAMPDIFF(YEAR, bdate, CURDATE()) AS age 
FROM employee ORDER BY bdate DESC 
LIMIT median_index, median_index;

END //
DELIMITER ;

我收到错误:

Error Code: 1327. Undeclared variable: median_index

据我所知,我已经正确声明了变量,并且不确定select语句为什么不起作用。

2ic8powd

2ic8powd1#

您正在使用用户定义的变量(前缀为@)。但是,在存储过程中应该使用局部变量(不带前缀)。这些变量必须在使用前声明。这里很好地解释了这种区别。
你会得到这样的结果:

DELIMITER //
CREATE PROCEDURE MedianAge()
BEGIN

DECLARE row_cnt INT unsigned;
DECLARE median_index INT unsigned;

SET row_cnt = (SELECT COUNT(*) FROM employees);
SET median_index = (row_cnt/2);

SELECT  TIMESTAMPDIFF(YEAR, bdate, CURDATE()) AS age 
FROM employee ORDER BY bdate DESC 
LIMIT median_index, median_index;

END //
DELIMITER ;

另外,请记住row\u count是mysql中的保留字(函数名)。最好避免将其用作变量名。

相关问题