首页 > 解决方案 > 参数化 mySQL 存储过程

问题描述

我有以下 mySQL (v5.7) 存储过程,效果很好(它计算最近 2​​5 行的平均值):

CREATE DEFINER=`SqueezeOJ`@`%` PROCEDURE `NVG_SMA25`(
    IN  myDate DATE,
    OUT mySMA25 DECIMAL(8,2)
)
BEGIN
    SELECT ROUND(AVG(ClosingPrice), 2) INTO mySMA25 FROM NVG
    WHERE TradeDate IN (SELECT * FROM (SELECT DISTINCT TradeDate 
                          FROM NVG 
                         WHERE TradeDate <= myDate
                         ORDER BY TradeDate DESC LIMIT 25) as calculating);
END

我想将 LIMIT 25 参数化为 LIMIT X - 我可以将 X 传递到过程中,但我尝试的一切都会导致错误。

有人可以指出我正确的方向吗?

谢谢,杰森

标签: mysqlstored-proceduresparameters

解决方案


13.2.9 SELECT 语句

...

  • LIMIT 子句可用于限制 SELECT 语句返回的行数。LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量,但以下情况除外:

    • 在准备好的语句中,可以使用 LIMIT 指定参数?占位符标记。

    • 在存储的程序中,可以使用整数值的例程参数或局部变量来指定 LIMIT 参数。

...

请参阅dbfiddle


推荐阅读