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;
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;