mysql - 参数化 mySQL 存储过程
问题描述
我有以下 mySQL (v5.7) 存储过程,效果很好(它计算最近 25 行的平均值):
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 传递到过程中,但我尝试的一切都会导致错误。
有人可以指出我正确的方向吗?
谢谢,杰森
解决方案
...
LIMIT 子句可用于限制 SELECT 语句返回的行数。LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量,但以下情况除外:
在准备好的语句中,可以使用 LIMIT 指定参数?占位符标记。
在存储的程序中,可以使用整数值的例程参数或局部变量来指定 LIMIT 参数。
...
请参阅dbfiddle。
推荐阅读
- python - Python-如何读写单个单元格
- r - 如何根据条件修改数据框中的现有变量
- node.js - Koa-prerender 错误
- javascript - Autodesk Forge - 如何同步获取多个选定对象的属性
- sendgrid - 如何设置 noreply@
谷歌云作曲家? - javascript - Node.js + Express 给我错误 - 无法获取 /
- .net-core - 基于 NuGet PackageReference 定义一个 C# 预处理器符号
- r - 计算一个月内的日期观察
- android - Twilio 仅数据 API
- c - 为什么我遇到 pthread_cond_signal 和 pthread_cond_wait 的死锁?