mysql - 如何引用 SQL 函数中的输入?
问题描述
我有一张这样的桌子:
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
我正在用 mySQL 编写一个函数来获得薪水中的第 n 个最大值。这是功能:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
# Write your MySQL query statement below.
select DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 offset (N - 1)
#FETCH NEXT 1 ROWS ONLY
);
END
如果我将 (N-1) 更改为 1 :
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
# Write your MySQL query statement below.
select DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 offset 1
#FETCH NEXT 1 ROWS ONLY
);
END
它运行正确。那么问题是如何在 SQL 函数中引用输入?它似乎可以像我们在其他语言中一样直接作为参数调用。
解决方案
LIMIT 参数不能是变量。使用准备好的语句 - 其中 LIMIT 参数可以取自变量。但函数中不允许使用动态 SQL - 使用存储过程:
CREATE PROCEDURE getNthHighestSalary(N INT)
BEGIN
SET @sql := 'SELECT DISTINCT Salary
INTO @output
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET ?';
PREPARE stmt FROM @sql;
SET @output := N-1;
EXECUTE stmt USING @output;
DROP PREPARE stmt;
SELECT @output;
END
推荐阅读
- eclipse - 迁移到 Eclipse photon 时,Eclipse RCP 最大化编辑器不显示
- android - 如何修复 EBUSY:Ionic 3 中的资源繁忙或锁定?
- javascript - 如何在 javascript 中使用 fetch api 从 C# Web 方法获取响应?
- javascript - js - querySelector 在伪类 ::before 中选择和编辑样式
- html - 在 org.apache.pdfbox.pdmodel.graphics.color.PDPattern.toRGB 获取 java.lang.UnsupportedOperationException
- python - 列表字典的键到行枚举、制表符分隔的 csv 文件
- jmeter - 如何计算 JMeter Webdriver 采样器中两个不同操作的时间
- ruby-on-rails - 为什么 gem 在用户登录后设计重定向到注册路径?
- javascript - 在 AngularJS 表格组件中计算值
- javascript - 浏览器zendframework找不到javascript脚本源