问答详情
源自:5-4 案例:涉及两张表的员工涨工资问题

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

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


提问者:码农_鑫森淼焱垚 2015-11-18 15:46

个回答

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

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


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

    写的很不错,赞一个