PL/SQL 显示顶级 'a' 员工工资的程序

PL/SQL Program to display the salaries of top 'a' employees

SET SERVEROUTPUT ON;

DECLARE
    CURSOR cemp
    IS
          SELECT esal
            FROM emp
        ORDER BY esal DESC;

    a     NUMBER (10) := &a;
    sal   emp.esal%TYPE;
BEGIN
    OPEN cemp;

    LOOP
        FETCH cemp INTO sal;

        DBMS_OUTPUT.put_line (sal);
        EXIT WHEN cemp%ROWCOUNT = a OR cemp%NOTFOUND;
    END LOOP;

    CLOSE cemp;
END;

我写了上面的 pl/sql 程序来显示最高层的工资 'a' employees.I 已经执行了 sql 中的代码 developer.But 我没有得到output.Is 代码中有什么错误吗?

转到 Dbms 输出选项卡查看附件,然后单击启用 dbms 输出

我自己想出了解决办法。

显然光标的使用有问题。

查询可以简化为:

SELECT * 
FROM 
 (
     SELECT EMPLOYEE, LAST_NAME, SALARY,
     RANK() OVER (ORDER BY SALARY DESC) emprank
     FROM emp
 )
WHERE emprank <= 3;