PL/SQL——案例:成績統計
阿新 • • 發佈:2019-02-05
案例:成績統計
用PLSQL語言編寫一個程式。按系(系名)分段統計(成績小於60分,60-85分,85分以上)“大學物理”課程各分數段的學生人數,及各系學生的平均成績。
/* SQL語句 1.得到有哪些系 select dno,dname from dep; -->游標-->迴圈-->退出條件:notfound 2.得到系中,選修了“大學物理”課程學生的成績 select grade from sc where cno=(select cno from course where cname=??) and sno in(select sno from student where dno=??); -->帶引數的游標-->迴圈-->退出條件:notfound 變數: 1.初始值 2.如何得到 每個分數段的人數 count1 number;count2 number;count3 number; 每個系選修了“大學物理”學生的平均成績 avggrade number; 1.算術運算 2.select avg(grade) into avggrade from sc where cno=(select cno from course where cname=??) and sno in(select sno from student where dno=??); */ set serveroutput on declare --系的游標 cursor cdept is select dno,dname from dep; pdno dep.dno%type; pdname dep.dname%type; --成績游標 cursor cgrade(coursename varchar2,depno number) is select grade from sc where cno=(select cno from course where cname=coursename) and sno in(select sno from student where dno=depno); pgrade sc.grade%type; --每個分數段的人數 count1 number;count2 number;count3 number; --每個系選修了“大學物理”學生的平均成績 avggrade number; --課程名稱 pcourseName varchar2:='大學物理'; begin --開啟系的游標 open cdept; loop --取一個系的資訊 fetch cdept into pdno,pdname; exit when cdept%notfound; --初始化工作 count1:=0;count2:=0;count3:=0; --系的平均成績 select evg(grade)into avggrade sc where cno=(select cno from course where cname=pcourseName) and sno in(select sno from student where dno=pdno); --取系中,選修了大學物理的學生成績 --開啟成績游標 open cgrade(pcourseName,pdno); loop --取一個學生的成績 fetch cgrade into pgrade; exit when cgrade%notfound; --判斷成績的範圍 if pgrade<60 then count1:=count1+1; elsif pgrade>=60 and pgrade<85 then count2:=count2+1; else count3:=count3+1; end if; end loop; --關閉成績游標 close cgrade; --儲存當前的結構 insert into msg1 values(pcourseName,pdname,count1,count2,count3,avggrade) end loop; --關閉系的游標 close cdept; commit; dbms_output.put_line('統計完成'); end; /