Oracle 游标的使用

来源:百度知道 编辑:UC知道 时间:2024/05/13 16:17:29
1、使用下面的SQL语句创建一个临时表top_dogs,用于保存雇员的姓名和工资。
CREATE TABLE top_dogs
( name VARCHAR2(25),
salary NUMBER(11,2));
2、创建一PL/SQL块,检索出工资水平在前几名的雇员的姓名及工资。
(1)通过SQL*Plus替代变量读取要检索前n名雇员。
(2)通过循环,从EMP表中获取前n名的雇员的姓名及工资。
(3)将检索出的雇员姓名和工资写入TOP_DOGS表。
(4)如果有多名雇员工资相同的情况,则每一个雇员都占n名中的一个名额。
(5)测试特殊情况,例如n=0或者n大于雇员总数。每次向TOP_DOGS写入数据前清空该表。

关键!!!3、在上面练习的基础上,如果考虑存在雇员工资相同的情况,须将获得工资数额前n名的雇员全部输出。
(1)例如输入n=2,那么King、Ford和Scott都会被输出。
(2)如果输入n=3,那么King、Ford、Scott、Jones都会被输出。
(3)每次向TOP_DOGS写入数据前清空该表。

不用cursor,一句sql足矣:
SELECT a.rn, a.name, c.salary
FROM emp c,
(SELECT rownum rn, o.salary
FROM (SELECT distinct salary
FROM emp ORDER BY salary desc) o
WHERE rownum <=3) a
WHERE c.salary = a.salary
ORDER BY 1;
解释:
o子查询,把所有工资倒序取出
a子查询,把前3个工资取出

单个执行一下每个子查询可以看到效果