Oracle 游标使用全解(4)

--13:对每位员工的薪水进行判断,如果该员工薪水高于其所在部门的平均薪水,则将其薪水减50元,输出更新前后的薪水,员工姓名,所在部门编号。
--AVG([distinct|all] expr) over (analytic_clause)
---作用:
--按照analytic_clause中的规则求分组平均值。
  --分析函数语法:
  --FUNCTION_NAME(<argument>,<argument>...)
  --OVER
  --(<Partition-Clause><Order-by-Clause><Windowing Clause>)
    --PARTITION子句
    --按照表达式分区(就是分组),如果省略了分区子句,则全部的结果集被看作是一个单一的组
    select * from emp1
DECLARE
    CURSOR
    crs_testAvg
    IS
    select EMPNO,ENAME,JOB,SAL,DEPNO,AVG(SAL) OVER (PARTITION BY DEPNO ) AS DEP_AVG
    FROM EMP1 for update of SAL;
    r_testAvg crs_testAvg%rowtype;
    salInfo emp1.sal%type;
    begin
    for r_testAvg in crs_testAvg loop
    if r_testAvg.SAL>r_testAvg.DEP_AVG then
    salInfo:=r_testAvg.SAL-50;
    end if;
    update emp1 set SAL=salInfo where current of crs_testAvg;
    end loop;
end;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2f48cf6a50b04c1130e10f23d5f34489.html