




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,游标简介,一个对表进行操作的SQL语句(如select)通常都可产生或处理一组记录,但是许多应用不能把整个结果集作为一个单元来处理,所以就需要一种机制来保证每次处理结果其中的一行或几行,游标(cursor)就提供了这种机制。SQLServer通过游标提供了对一个结果集进行逐行处理的能力,游标可看做一种特殊的指针,它与某个查询结果相联系,可以指向结果集的任意位置,以便对指定位置的数据进行处理。使用游标可以在查询数据的同时对数据进行处理。游标是系统为用户开设的一个数据缓冲区,存放SQL语句的结果数据集,每个游标区都有一个名字,通过移动游标名代表的指针来访问数据集中的数据,.,2,游标的使用步骤,使用游标需要经历五个步骤:定义游标:DECLARE打开游标:OPEN逐行提取游标集中的行:FETCH关闭游标:CLOSE释放游标:DEALLOCATE,.,3,游标的定义,游标的定义DECLARESCROLLCURSORFORforreadonly|updateofSCROLL:说明所声明的游标可以前滚、后滚,可使用所有的提取选项。如省略,则只能使用NEXT提取选项。FORREADONLY|UPDATEOF:READONLY表示当前游标集中的元组仅可以查询,不能修改;UPDATEOF表示可以对当前游标集中的元组进行更新操作。如果有OF,表示仅可以对游标集中指定的属性列进行更新操作。缺省为UPDATE定义一个能够存放sc表数据的游标Declarecur_sccursorforSelect*fromsc,.,4,打开游标,游标定义后,如果要使用游标,必须先打开游标。打开游标操作表示:系统按照游标的定义从数据库中将数据检索出来,放在内存的游标集中(如果内存不够,会放在临时数据库中)为游标集指定一个游标,该游标指向游标集中的第1个元组格式:Open游标名;例:Opencur_sc,.,5,打开游标,打开游标后,可以使用全局变量CURSOR_ROWS查看游标集中数据行的数目。全局变量CURSOR_ROWS中保存着最后打开的游标中的数据行数。当其值为0时,表示没有游标打开;当其值为m(m为正整数)时,游标已被完全填充,m是游标中的数据行数。【例】定义游标XS_CUR3,然后打开该游标,输出其行数。DECLAREXS_CUR3CURSORSCROLLFORSELECT学号,姓名,总学分FROMXSBFORUPDATEOF总学分OPENXS_CUR3SELECT游标XS_CUR3数据行数=CURSOR_ROWS,.,6,获取游标数据,FETCHNEXT|PRIOR|FIRST|LAST|ABSOLUTEn|nvar|RELATIVEn|nvarFROM游标INTO变量名,NEXT|PRIOR|FIRST|LAST:说明读取数据的位置。1.Next:读取当前行的下一行,并使其置为当前行。如fetchnext为对游标的第一次提取操作,则读取第一行,next为默认值。2.prior:读取当前行的前一行,并使其置为当前行。如是第一次操作,则无值返回,游标被置于第一行之前。3.first:读取第一行,并使其置为当前行。4.last:读取最后一行,并使其置为当前行。,.,7,获取游标数据,5.ABSOLUTEn|nvar|RELATIVEn|nvar:给出读取数据的位置与游标头或当前位置的关系,其中n必须为整型常量,nvar必须为smallint、tinyint或int型的。,【例】从游标XS_CUR1中提取数据。设该游标已经声明并打开。FETCHNEXTFROMXS_CUR1执行结果如下:,.,8,【例】从游标XS_CUR2中提取数据。设该游标已经声明。OPENXS_CUR2FETCHFIRSTFROMXS_CUR2读取游标第一行(当前行为第一行),结果如下:,FETCHNEXTFROMXS_CUR2读取下一行(当前行为第二行),结果如下:,获取游标数据,.,9,FETCHPRIORFROMXS_CUR2读取上一行(当前行为第一行),结果如下:,FETCHLASTFROMXS_CUR2读取最后一行(当前行为最后一行),结果如下:,获取游标数据,.,10,FETCHRELATIVE-2FROMXS_CUR2读取当前行的上两行(当前行为倒数第三行),结果如下:,FETCH语句的执行状态保存在全局变量FETCH_STATUS中,其值为0表示上一个FETCH执行成功;为-1表示所要读取的行不在结果集中;为2表示被提取的行已不存在(已被删除)。例如,接着上例继续执行如下语句:FETCHRELATIVE3FROMXS_CUR2SELECTFETCH执行情况=FETCH_STATUS执行结果如下:,获取游标数据,.,11,结束游标的使用,关闭游标CLOSE游标名释放游标:游标关闭后,其定义仍在,需要时可用OPEN语句打开它再使用。若确认游标不再需要,就要释放其定义占用的系统空间,即删除游标。DEALLOCATE游标名,.,12,游标的使用,变量赋值与表达式显示变量赋值语句的语法为:SET=变量列表赋值并显示的语句的语法为:SELECT=,=.表达式列表的显示语句的语法为:SELECT,.,.,13,游标的使用,例创建一个游标,逐行显示选修了计算机原理课程的学生姓名、相应成绩和该课程的平均分。分析:选修计算机原理课程的同学可能不止一个,需要使用游标查询选修该门课程的学生姓名和相应的选课成绩。定义游标为:DECLAREmyCurCURSORFORSELECTstudentName,scoreFROMStudenta,Courseb,ScorecWHEREa.studentNo=c.studentNoANDb.courseNo=c.courseNoANDcourseName=计算机原理,.,14,游标的使用,要获得该课程的平均分,必须首先计算选课人数和总分定义计数器和累加器变量countScore、sumScore,初始值为0DECLAREcountScoresmallint,sumScoreintSETcountScore=0SETsumScore=0定义两个变量sName和score,用于接收游标集中当前游标中的学生姓名和相应的选课成绩DECLAREsNamevarchar(20),scoretinyint由于FETCH命令每次仅从游标集中提取一条记录,必须通过一个循环来重复提取,直到游标集中的全部记录被提取全局变量FETCH_STATUS用于判断是否正确地从游标集中提取到了记录;FETCH_STATUS=0表示已经正确提取到了游标记录;循环语句为:WHILE(FETCH_STATUS=0),.,15,游标的使用,在循环体内:首先显示所提取到的学生姓名和相应的选课成绩,使用语句:SELECTsName学生姓名,score课程成绩其次,计数器countScore进行计数,并将提取到的成绩累加到变量sumScore中。语句为:SETsumScore=sumScore+score-计算总分SETcountScore=countScore+1-计算选课人数提取下一条游标记录:FETCHmyCurINTOsName,score重复,直到全部游标记录处理完毕,退出循环。处理完全部游标记录后:关闭和释放游标对计数器countScore进行判断:如果为0,表示没有同学选修,其平均分为0;否则,平均分等于总分除以选课人数。,.,16,游标的使用,程序如下:/*定义变量及赋初值*/DECLAREsNamevarchar(20),scoretinyintDECLAREsumScoreint,countScoresmallintSETsumScore=0SETcountScore=0-定义游标DECLAREmyCurCURSORFORSELECTstudentName,scoreFROMStudenta,Courseb,ScorecWHEREa.studentNo=c.studentNoANDb.courseNo=c.courseNoANDcourseName=计算机原理OPENmyCur-打开游标-获取当前游标的值放到变量sName和score中FETCHmyCurINTOsName,score,.,17,游标的使用,WHILE(FETCH_STATUS=0)BEGIN-显示变量sName和score中的值SELECTsName学生姓名,score课程成绩SETsumScore=sumScore+score-计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东护理管理自考试题及答案
- 冷水水表考试题及答案
- 广东高级翻译自考试题及答案
- 矿山爆破考试题及答案
- 内蒙古呼伦贝尔农垦拉布大林上库力三河苏沁农牧场有限公司招聘笔试题库及完整答案详解一套
- 高炉配管工抗压考核试卷及答案
- 水文水井钻探工应急处置考核试卷及答案
- 军事技能考试题及答案
- 就业测评考试题及答案
- 中高频炉工成本控制考核试卷及答案
- 《戏曲服饰欣赏》课件
- 《公共基础知识》贵州省黔南布依族苗族自治州都匀市2024年事业单位考试统考试题含解析
- 电力营销业务培训课件
- 技术方案评审表
- 人教版九年级数学下册第二十六章反比例函数-作业设计
- 人美小学美术五上《第1课:肖像艺术》课件
- 边坡削坡施工方案
- 湘美版五年级上册美术全册教案
- 浙江省通用安装工程预算定额第八册
- 乡村振兴战略实施与美丽乡村建设课件
- 视听语言PPT完整版全套教学课件
评论
0/150
提交评论