【问题标题】:PL/SQL Program to display the salaries of top 'a' employeesPL/SQL 程序显示顶级“a”员工的工资
【发布时间】:2018-10-31 23:11:48
【问题描述】:
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中执行了代码。但是我没有得到任何输出。代码中有什么问题吗?

【问题讨论】:

  • 首先检查您是否可以使用dbms_output.put_line。只需做一个简单的“Hello, world”测试,无需任何循环或表格。也许在 SQL*Plus 中使用set serveroutput on 对其进行测试。然后,如果可行,请自行测试查询。听起来问题不在于 Top-N 的薪水,而在于使用这些工具。
  • 我已经在 TOAD 中执行了你的代码,它确实正确显示了工资。
  • 还要验证您在 esal 列中没有空值 - 如果有,请最后按 esal desc 空值排序;

标签: sql oracle plsql dbms-output


【解决方案1】:

我自己想出了解决办法。

显然光标的使用有问题。

查询可以简化为:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多