您好,欢迎访问三七文档
计算机科学与技术系实验报告专业名称网络工程课程名称数据库原理与应用项目名称游标的应用班级学号姓名同组人员无实验日期2016.11.15一、实验题目游标的应用二、实验目的1.理解SQL的宿主使用方式。2.掌握游标的使用方法。三、实验内容1、实验内容1)参考例7-3建立一个嵌套游标应用,其功能是按学号升序列出全体学生信息(学号、姓名、院系名称)及其所修课程的名称和考试成绩信息(基于前面实验建立的表和插入的数据)2)按要求逐一读出游标中的记录,并在界面上显示。2、实验原理1)定义游标的SQL语句的一般格式是:DECLARE游标名[INSENSITIVE][SCROLL]CURSORFORSELECT-查询块[FOR{READONLY|UPDATE[OF列名[,列名…]]}]2)打开游标的SQL语句的一般格式是:OPEN游标名3)从游标中读记录的SQL语句的一般格式是:FETCH[[NEXT|PRIOR|FIRST|LAST|ABSOLUTEn|RELATIVEn]FROM]游标名[INTO:主变量1,:主变量2…]4)关闭游标的SQL语句的一般格式是:CLOSE游标名5)释放游标DEALLOCATE游标名6)使用游标的UPDATE命令的格式是:UPDATE表名SET列名={表达式|NULL}[,列名={表达式|NULL}…]WHERECURRENTOF游标名7)使用游标的DELETE命令的格式是:DELETEFROM表名WHERECURRENTOF游标名四、实验步骤与结果上机实验时应该一人一组,独立上机。对出现的问题要善于自己发现问题所在,独立处理。上机步骤:1.调出SQLServer2008软件的用户界面,进入SQLSERVERMANAGEMENTSTUDIO。2.输入自己编好的程序。3.检查已输入的程序正确与否。4.运行程序,并分析运行结果是否合理和正确。在运行时要注意当输入不同的数据时所得到的结果是否正确。5.输出程序清单和运行结果。过程分析:1)参考例7-3建立一个嵌套游标应用,其功能是按学号升序列出全体学生信息(学号、姓名、院系名称)及其所修课程的名称和考试成绩信息。根据题目要求建立一个游标emp_v1,再在游标emp_v1中嵌套了一个游标emp_v2在游标emp_v1里定义局部变量@xuehaochar(8),@xingmingchar(10),@yuanxichar(10)在游标emp_v2里定义了局部变量@kechengchar(8),@chengjichar(10)。游标emp_v1和游标emp_v2通过选课表里的学号与局部变量@xuehao相等来实现嵌套。然后依次打印出游标中记录的内容。代码实现如下:declare@xuehaochar(8),@xingmingchar(10),@yuanxichar(10)declare@kechengchar(8),@chengjichar(10)declareemp_v1cursorforselect学生.学号,学生.姓名,院系.名称fromdbo.学生joindbo.院系on学生.院系=院系.编号orderby学号openemp_v1fetchfromemp_v1into@xuehao,@xingming,@yuanxiwhile@@FETCH_STATUS=0beginprint'学号:'+@xuehao+'姓名:'+@xingming+'院系:'+@yuanxideclareemp_v2cursorforselect课程.课程名称,选课.成绩fromdbo.选课joindbo.课程on课程.课程编号=选课.课程编号where选课.学号=@xuehaoopenemp_v2fetchfromemp_v2into@kecheng,@chengjiwhile@@FETCH_STATUS=0beginprint@kecheng+@chengjifetchfromemp_v2into@kecheng,@chengjiendcloseemp_v2deallocateemp_v2fetchfromemp_v1into@xuehao,@xingming,@yuanxiendcloseemp_v1deallocateemp_v12)按要求逐一读出游标中的记录,并在界面上显示。执行代码逐一独处游标中定义的变量的记录截图如下:图1读取游标记录五、实验分析(实验过程中的问题分析、产生的原因以及解决方法;实验结果分析;有待优化思路)问题:在一开始编写代码执行时发现独处游标中的记录时显示的并不是学生所在的院系名称而是所在院系编号。错误截图如下:图2错误截图分析:在定义一个游标emp_v1时,他的内容是select语句的执行结果,故在做select时直接选取了学生表里的院系而非院系表里的名称,从而导致最后读取游标的记录时打印出来的是院系编号而不是院系名称。解决办法:在select选择语句里加了一个连接操作,将院系表与学生表做了一个连接从而选取院系表的名称这一属性。执行语句改为:declareemp_v1cursorforselect学生.学号,学生.姓名,院系.名称fromdbo.学生joindbo.院系on学生.院系=院系.编号六、实验总结通过本次实验我知道了关于游标的基本知识,他的基本思想是讲查询结果存储在一张临时表中,然后从临时表中逐一读出记录进行处理,这种临时表被称作游标。游标允许对返回结果集中每一行进行相同或不相同的操作,而不是一次对整个结果进行同一种操作。比较具有实际意义。七、通过其它思考题:1.游标的作用?游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。概括来讲,SQL的游标是一种临时的数据库对象,即可以用来存放在数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。得分(百分制)
本文标题:数据库实验八
链接地址:https://www.777doc.com/doc-5441617 .html