代碼(根據(jù)課程,列出所有院系成績及平均分?jǐn)?shù))
分析:
/* 用到的表: --教師信息(教師編號tno,教師姓名tname,職稱title,聘用時(shí)間hiredate,工資sal,獎(jiǎng)金bonus,領(lǐng)導(dǎo)mgr,院系編號deptno) --學(xué)生信息student(學(xué)生編號sno,學(xué)生姓名sname,性別sex,生日birth,密碼passwd,院系編號dno) --院系信息dep(院系編號dno,院系名稱dname,教師編號director,電話tel) --考試信息sc(學(xué)生編號sno,課程編號cno,分?jǐn)?shù)grade) --課程信息course(課程編號cno,課程名稱cname,課程學(xué)分credit,課時(shí)ctime,課程分?jǐn)?shù)quota) */ /* 過程分析: 1.得到課程 select?cno,cname?from?course; pcno?課程編號 pcname??課程名稱 2.得到院系 select?dno,dname?from?dep?; pdno? pdname; 3.得到某課程,某院系,學(xué)生考試成績 select?grade?from?sc?where?cno=pcno?and?sno?in?(select?sno?from?student?dno=pdno); psumstu?學(xué)生人數(shù) psumgra?總分 count1 count2 count3 avggra?=?sumgra/sumstu; 4.插入結(jié)果 insert?into?msg1?values(pcname,?pdname,?count1,count2,count3,avggra); */
代碼:
declare ??--定義光標(biāo)cemp1:得到課程列表 ??cursor?cemp1?is?select?cno,cname?from?course; ??pcno?course.cno%type; ??pcname?course.cname%type; ??--定義光標(biāo)cemp2:得到院系列表 ??cursor?cemp2?is?select?dno,dname?from?dep; ??pdno?dep.dno%type; ??pdname?dep.dname%type; ??--定義光標(biāo)cemp3:得到某課程,某院系,學(xué)生考試成績 ??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; ??--取得一條課程數(shù)據(jù) ??loop ??fetch?cemp1?into?pcno,pcname; ??exit?when?cemp1%notfound; ???? ????open?cemp2; ????loop ????--取得一條院系 ????fetch?cemp2?into?pdno,pdname; ????exit?when?cemp2%notfound; ???? ????--設(shè)置數(shù)據(jù) ????count1?:=0; ????count2?:=0; ????count3?:=0; ????psumstu?:=0; ????psumgra?:=0; ???? ??????open?cemp3(pcno,pdno); ??????loop ??????--取得一條學(xué)員分?jǐn)?shù) ??????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;--學(xué)員總?cè)藬?shù) ????????psumgra?:=?psumgra?+?pgrade;--學(xué)員總分?jǐn)?shù) ?????? ??????end?loop; ??????close?cemp3; ??????--插入數(shù)據(jù) ??????--為了避免被除數(shù)0的錯(cuò)誤,先判斷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; /
結(jié)果:
--查看課程?大學(xué)物理?的成績 select?*?from?msg1?where?coursename='大學(xué)物理';
2016-05-19
可以的,多練習(xí) 之后可以不看老師的代碼做出來 并且理解了 那就算是學(xué)會了