在MySQL Prepared语句中作为参数值的十进制底抛出错误



My Goal:
选择表的中间行

What have I try?
我遵循https://stackoverflow.com/a/33168093/282155中提到的方法。
下面是我的代码:

SELECT @a:=FLOOR((COUNT(*)-1)/2) FROM <Table> ORDER BY <Column>;  
PREPARE STMT FROM 'SELECT * FROM <Table> LIMIT ?, 1';  
EXECUTE STMT USING @a;

但是我的execute语句抛出错误:

ERROR 1210 (HY000) at line <line no>: Incorrect arguments to EXECUTE

我的观察:

  1. 整数的下限在预处理语句中使用时可以正常工作。例如:FLOOR(COUNT(*)-1)
  2. 在Select语句中使用时,执行decimal的floor也可以正常工作:SELECT FLOOR((COUNT(*)-1)/2) FROM <Table>;

我很困惑为什么我的代码不工作

提前感谢。

考虑使用以下等效的(但有效的)选项。

SELECT @sql := CONCAT('SELECT * 
FROM <Table>
ORDER BY <Column>
LIMIT ', FLOOR((COUNT(*)-1)/2), ', 1') FROM <Table>;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

不要忘记释放语句准备。

点击这里查看演示。