雲中菩提
2015-09-22 13:52
分析:
/* 用到的表: --教师信息(教师编号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='大学物理';
可以的,多练习 之后可以不看老师的代码做出来 并且理解了 那就算是学会了
Oracle数据库开发必备利器之PL/SQL基础
75048 学习 · 208 问题
相似问题