存储过程实现学生成绩由百分制到等级制2.doc_第1页
存储过程实现学生成绩由百分制到等级制2.doc_第2页
存储过程实现学生成绩由百分制到等级制2.doc_第3页
存储过程实现学生成绩由百分制到等级制2.doc_第4页
存储过程实现学生成绩由百分制到等级制2.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、 实验题目: 1.将代码1的功能用语义等价的更新游标来实现 2.定义具有以下功能的存储过程(1)计算给定课程的总分数(2)统计给定课程的成绩分布情况,即按照各分数段统计人数;(60,60,70),70,80),80,90),90,100(3)将学生选课成绩从百分制改为等级制(即A 、B 、C、D、E);并给出一个调用的实例 3.用存储过程实现:用游标的声明、打开、提取、关闭语句执行游标操作(查询某个指定学生名字及其所选修的课程数,以及总分),写出程序代码,总结出以上游标操作过程中各个游标属性的取值情况。给出一个调用实例 用存储过程实现:查询某个指定学生名字及其所选修的课程数,以及总分,但不使用游标,给出一个调用实例直接写出查询某个指定学生名字及其所选修的课程数,以及总分的sql。三种方式可以指定同一个学生。分析各种实现方法的异同。二、 实验过程:1. ()用更新游标实现如下:USE SchoolGODECLARE tid char(10), salary int- 声明变量DECLARE my_cursor CURSOR FOR- 声明游标SELECT tid, salary FROM teachersOPEN my_cursor- 打开游标FETCH NEXT FROM my_cursor INTO tid, salary- 读取记录并推进游标WHILE fetch_status=0BEGIN IF salary = 3000 and salary = 4000UPDATE teachers SET salary=salary-200 WHERE current of my_cursorFETCH NEXT FROM my_cursor INTO tid, salary- 读取记录并推进游标ENDCLOSE my_cursor- 关闭游标DEALLOCATE my_cursor- 释放游标执行前教师部分表如下:执行后教师表中对应部分如下:2. (1)先看第一个求总分的实验的解题过程:第一种方法如下:Create proc score_sum0 class char(8), sum int outputAs select sum =sum(score) from choices group by cid having cid=class执行入下:Declare tal intEXEC score_sum 10021,tal outputPrint tal结果显示:第二种方法用游标做:Create proc score_sum ( class char(10), sum int output)Asset sum=0DECLARE course char(10),score intDECLARE my_cursor CURSOR FOR- 声明游标SELECT cid, score FROM choicesOPEN my_cursor- 打开游标FETCH NEXT FROM my_cursor INTO course, score- 读取记录并推进游标WHILE fetch_status=0BEGIN IF course=class and score is not null set sum =sum+ scoreFETCH NEXT FROM my_cursor INTO course, score- 读取记录并推进游标ENDCLOSE my_cursor- 关闭游标DEALLOCATE my_cursor return 0 执行如下:Declare tal intEXEC score_sum 10021,tal outputPrint tal结果显示:我们可以看到有不同的执行时间。(2) 统计给定课程的成绩分布情况create proc cout class char(8), cc1 int output ,cc2 int output,cc3 int output,cc4 int output,cc5 int output, e int ,d int,c int,b int,a intas select cc1 =count(score) from choices where score=e and score=d and score=c and score=b and score=a and cid=class输入的参数是:10005,60,70,80,90,100我们可以看到结果如下: (3) 把学生成绩改为等级的方式考虑到可能后面一题要用到分数这一项,所以我在原表上添加了一列作为等级。alter table choices add grade char(10)解题过程如下:create proc grading e int ,d int,c int,b int,a intas update choices set grade=E where score=e and score=d and score=c and score=b and score=aexec grading 60,70,80,90,100 -按声明参数的顺序实验的结果确实是把各个分数段的等级标记了出来。3. 用三种方法来实现,并比较那三种方法:) 简单的语句:-SQL 查询select sname,count(cid) courses,sum(score) totalscorefrom choices c join students s on c.sid=s.sidgroup by c.sid,s.snamehaving c.sid=800002933) 用存储过程,但不用游标create proc querysid int,sname char(10) output,courses int output,scores int outputasselect sname=sname from students where sid=sidselect courses=count(cid)from choices c join students s on c.sid=s.sidgroup by c.sid,s.snamehaving c.sid=sidselect scores=sum(score)from choices c join students s on c.sid=s.sidgroup by c.sid,s.snamehaving c.sid=sid调用过程如下:declare name char(10),ctotal int,stotal intexec query 800002933,name output,ctotal output,stotal outputprint name +num +sumprintname+convert(varchar,ctotal)+convert(varchar,stotal)可以看到执行的结果如下: ) 用游标和存储过程Create proc querysidsid int ,sname char(10) output,courses int output,scores int outputAsset courses=0 set scores=0select sname=sname from students where sid=sidDECLARE studentid int,sc intDECLARE my_cursor CURSOR FOR- 声明游标SELECT sid,score FROM choices OPEN my_cursor- 打开游标FETCH NEXT FROM my_cursor INTO studentid,sc- 读取记录并推进游标WHILE fetch_status=0BEGIN IF studentid=sid set courses=courses+1IF studentid=sid and sc is not null set scores=scores+scFETCH NEXT FROM my_cursor INTO studentid,sc- 读取记录并推进游标ENDCLOSE my_cursor- 关闭游标DEALLOCATE my_cursor return 0调用过程如下: declare name char(10),ctotal int,stotal intexec querysid 800002933,name output,ctotal output,stotal outputprint name +num +sumprint name+convert(varchar,ctotal)+ +convert(varchar,stotal)结果如下:根据上面对同一个学生的名字,选课数目,总分的三种方法对比,我们可以看到它们有很多不同的地方,首先是时间的长短很不相同:它们分别是:2秒3秒19秒,然后实现的方法和代码长短都很不同。由此我认为,游标的执行时间比较长,效率较没有用游标的那两种方法略低。 三、 实验心得 首先,我觉得这次实验让我学到了很多知识。对存储过程,游标的使用和实现由了切身

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论