本文最后更新于 134 天前。
注意点:①SELECT salary into result
②函数中最后加分号,再RETURN result;
③查询中子句的执行顺序通常如下:
FROM 子句:指定从中检索数据的表。
WHERE 子句:根据指定的条件筛选行。
GROUP BY 子句:根据指定的列或表达式对行进行分组。
HAVING 子句:根据条件筛选分组的行。
SELECT 子句:选择将在结果集中返回的列或表达式。
ORDER BY 子句:根据指定的列或表达式对结果集进行排序。
④
- 不能直接在原表查询中使用ROWNUM进行大于某值的筛选:因为
ROWNUM
是在数据被选出之后才生成的,所以直接使用ROWNUM > n
(n>1)通常不会得到预期结果。你需要先生成全部排序或筛选后的结果集,然后再对ROWNUM
进行限制。 - ROWNUM与ORDER BY的结合:为了正确实现分页或获取特定顺序的行,必须在子查询中先进行
ORDER BY
,然后在外层查询中应用ROWNUM
过滤。 - ROWNUM是一个只读伪列:这意味着你不能对它进行修改或更新,也不能将其作为表的一部分进行插入或更新操作。
错误写法:
SELECT salary INTO result
FROM (
SELECT DISTINCT salary
FROM Employee
ORDER BY salary DESC
)
WHERE ROWNUM = N;
正确写法:
CREATE FUNCTION getNthHighestSalary(N IN NUMBER) RETURN NUMBER IS
result NUMBER;
BEGIN
/* Write your PL/SQL query statement below */
SELECT salary into result
FROM(
SELECT salary, ROWNUM num
FROM(
SELECT DISTINCT salary
FROM Employee
ORDER BY salary DESC
)
)
WHERE num = N;
RETURN result;
END;