老师的第二种思路(通过累加得到员工薪水)

来源:5-4 案例:涉及两张表的员工涨工资问题

码农_鑫森淼焱垚

2015-11-18 15:46

set serveroutput on
declare
  --部门的光标
  cursor cdept is select deptno from dept;
  pdeptno dept.deptno%type;
  --部门中员工的薪水
  cursor cemp(dno number) is select sal from emp where deptno=dno;
  psal emp.sal%type;
  --每个工资段的人数
  count1 number;
  count2 number;
  count3 number;
  --各部门的工资总额
  saltotal number;
  
begin
  --打开部门光标
  open cdept;
  loop
    --初始化值
    count1 := 0;
    count2 := 0;
    count3 := 0;
    saltotal := 0;
    --取得每个部门的部门号
    fetch cdept into pdeptno;
    exit when cdept%notfound;
    --打开员工薪水光标
    open cemp(pdeptno);
      loop
        fetch cemp into psal;
        exit when cemp%notfound;
        saltotal := saltotal+psal;
        --判断员工薪水的字段
        if psal < 3000 then count1:=count1+1;
        elsif psal >= 3000 and psal <= 6000 then count2:=count2+1;
        else count3:=count3+1;
        end if;
      end loop;
    --关闭员工薪水光标
    close cemp;
    --保存当前部门的结果
    insert into msg values(pdeptno,count1,count2,count3,saltotal);
  end loop;
  --关闭部门光标
  close cdept;
  dbms_output.put_line('统计结束');
end;
/


写回答 关注

2回答

  • 慕少1239623
    2019-09-19 11:03:55

    第二个loop循环中,结束条件是exit when cemp%notfound, saltotal := saltotal+psal;这一段计算出来的不应该是所有部门员工工资总和么


  • 好帮手慕珊
    2015-11-19 09:43:22

    写的很不错,赞一个

Oracle数据库开发必备利器之PL/SQL基础

Oracle数据库高级开发必备的基础,通过实例带你熟练掌握

75048 学习 · 208 问题

查看课程

相似问题