分析:/*
用到的表:
--教师信息(教师编号tno,教师姓名tname,职称title,聘用时间hiredate,工资sal,奖金bonus,领导mgr,院系编号deptno)
--学生信息student(学生编号sno,学生姓名sname,性别sex,生日birth,密码passwd,院系编号dno)
--院系信息dep(院系编号dno,院系名称dname,教师编号director,电话tel)
--考试信息sc(学生编号sno,课程编号cno,分数grade)
--课程信息course(课程编号cno,课程名称cname,课程学分credit,课时ctime,课程分数quota)
*/
/*
过程分析:
1.得到课程
select cno,cname from course;
pcno 课程编号
pcname 课程名称
2.得到院系
select dno,dname from dep ;
pdno
pdname;
3.得到某课程,某院系,学生考试成绩
select grade from sc where cno=pcno and sno in (select sno from student dno=pdno);
psumstu 学生人数
psumgra 总分
count1
count2
count3
avggra = sumgra/sumstu;
4.插入结果
insert into msg1 values(pcname, pdname, count1,count2,count3,avggra);
*/
代码:declare
--定义光标cemp1:得到课程列表
cursor cemp1 is select cno,cname from course;
pcno course.cno%type;
pcname course.cname%type;
--定义光标cemp2:得到院系列表
cursor cemp2 is select dno,dname from dep;
pdno dep.dno%type;
pdname dep.dname%type;
--定义光标cemp3:得到某课程,某院系,学生考试成绩
cursor cemp3(xcno course.cno%type,xdno dep.dno%type) is select grade from sc where cno=xcno and sno in (select sno from student where dno = xdno);
pgrade sc.grade%type;
psumstu number;
psumgra sc.grade%type;
count1 number;
count2 number;
count3 number;
begin
open cemp1;
--取得一条课程数据
loop
fetch cemp1 into pcno,pcname;
exit when cemp1%notfound;
open cemp2;
loop
--取得一条院系
fetch cemp2 into pdno,pdname;
exit when cemp2%notfound;
--设置数据
count1 :=0;
count2 :=0;
count3 :=0;
psumstu :=0;
psumgra :=0;
open cemp3(pcno,pdno);
loop
--取得一条学员分数
fetch cemp3 into pgrade;
exit when cemp3%notfound;
if (pgrade<60) then count1 :=count1+1;
elsif (pgrade>=60 and pgrade<85) then count2 :=count2+1;
else count3 :=count3+1;
end if;
psumstu := psumstu +1;--学员总人数
psumgra := psumgra + pgrade;--学员总分数
end loop;
close cemp3;
--插入数据
--为了避免被除数0的错误,先判断psumstu的值是否为0
if(psumstu<>0) then
insert into msg1 values(pcname,pdname,count1,count2,count3,(psumgra/psumstu));
else
insert into msg1 values(pcname,pdname,count1,count2,count3,0);
end if;
end loop;
close cemp2;
end loop;
close cemp1;
end;
/
结果:--查看课程 大学物理 的成绩
select * from msg1 where coursename='大学物理';