You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PL/SQL存储过程修改需求:显示指定数量及同薪资高薪员工

解决方案:PL/SQL存储过程显示含同薪资的指定数量高薪员工

原代码的问题在于FETCH FIRST num_employee ROWS ONLY会严格返回你指定的行数,不会自动包含后续薪资相同的员工。要实现需求,得先拿到第N个员工的薪资,再把所有薪资不低于这个值的员工都查出来。

修改后的存储过程代码如下:

CREATE OR REPLACE PROCEDURE p5_q5 (num_employee NUMBER) AS
    v_min_sal EMP.SAL%TYPE;
BEGIN
    -- 获取第num_employee名员工的薪资(降序排序后的)
    SELECT SAL INTO v_min_sal
    FROM (
        SELECT SAL,
               ROW_NUMBER() OVER (ORDER BY SAL DESC) AS rn
        FROM EMP
    )
    WHERE rn = num_employee;

    -- 查询所有薪资大于等于该值的员工,按薪资降序、姓名排序(可选)
    FOR emp IN (
        SELECT ENAME, SAL
        FROM EMP
        WHERE SAL >= v_min_sal
        ORDER BY SAL DESC, ENAME
    ) LOOP
        DBMS_OUTPUT.PUT_LINE('Employee name: ' || emp.ENAME || ' - Salary: ' || emp.SAL);
    END LOOP;
END;
/

执行EXEC p5_q5(3);后,就能得到你要的结果:

Employee name: KING - Salary: 5512.5
Employee name: JONES - Salary: 3570
Employee name: SCOTT - Salary: 3450
Employee name: FORD - Salary: 3450

补充说明

  • 用ROW_NUMBER()来定位第N个员工的薪资,确保拿到的是降序后的第N位薪资值
  • 后续查询筛选所有薪资不低于该值的员工,自然就包含了所有同薪资的后续员工
  • 额外加了ENAME排序是为了同薪资的员工显示顺序固定,你可以根据需要调整

内容的提问来源于stack exchange,提问作者Brunno Santos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:55:14