为了账号安全,请及时绑定邮箱和手机立即绑定

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

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 回答

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


0 回复 有任何疑惑可以回复我~

写的很不错,赞一个

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信