2
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' 员工的工资。我已经在 sql developer 中执行了代码。但是我没有得到任何输出。代码中有什么问题吗?

4

2 回答 2

2

我自己想出了解决方案。

显然光标的使用存在一些问题。

查询可以简化为:

SELECT * 
FROM 
 (
     SELECT EMPLOYEE, LAST_NAME, SALARY,
     RANK() OVER (ORDER BY SALARY DESC) emprank
     FROM emp
 )
WHERE emprank <= 3;
于 2018-06-15T07:15:11.707 回答
0

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

数据库管理系统

于 2018-06-01T10:18:18.763 回答