数据库《游标的使用》实验报告
- 格式:doc
- 大小:682.50 KB
- 文档页数:10
239 实验10.2 使用游标【实验内容】定义一个游标c_find ,返回图书表BookInfo 中所有出版社为“人民邮电出版社”的书籍信息,在游标中查找并显示书名为“计算机科学导论”的记录。
【实验步骤】① 打开管理工具SQL Server Management Studio 。
② 单击,打开查询编辑器,输入以下代码。
declare @bno char(10),@bname varchar(50),@author varchar(30),@publish varchar(50), @price floatDeclare c_find cursor --定义游标For select Bookid,Bookname,author,Publisher,price from BookInfowhere Publisher='人民邮电出版社'Open c_find --打开游标Fetch next from c_find into @bno, @bname, @author, @publish, @price--从游标中读取数据While @@fetch_status=0 --若游标中能读取到数据BeginIf @bname='计算机科学导论'BeginPrint '找到计算机科学导论书籍的信息:'Print @bno + ' ' + @bname + ' ' +@author + ' ' +@publish + ' ' + str(@price) BreakEndFetch next from c_find into @bno, @bname, @author, @publish, @priceEndIf @@fetch_status !=0Print '很抱歉,没有找到计算机科学导论书籍的信息'Close c_find --关闭游标Deallocate c_find --释放游标③ 单击工具栏中的按钮,执行以上T-SQL 语句。
计算机系一、实验目的1、掌握创建游标的方法和步骤;2.掌握游标的使用方法;二、实验内容1、游标的创建;2、游标的使用方法。
三、实验步骤1、游标的创建。
1)使用S_C数据库中的S表、C表、SC表创建一个存储过程—sp_CURSOR1。
该存储过程的作用是:显示所有的课程信息,如果成绩>=90显示成绩本身;成绩>=80显示良;成绩>=70显示中;成绩>=60显示及格;成绩>=0显示不及格;如果没有成绩则显示无成绩。
信息还包含学号,姓名,课程和成绩,显示格式如下:学号---姓名---课程---成绩,如图1所示。
要求使用游标技术实现上述要求,使用Print语句实现显示。
图1 成绩显示格式sp_CURSOR1的创建语句:create proc sp_CURSOR1asDeclare @sname varchar(50)Declare @sno varchar(20)Declare @cno varchar(20)Declare @cname varchar(20)Declare @grade varchar(20)Declare SCursor Cursor ForSelect sno,cno,grade From SCOpen SCursorFetch Next From SCursor Into @sno,@cno,@gradeWhile@@FETCH_STATUS= 0beginselect @sname=sname From S where sno=@snoselect @cname=cname From C where cno=@cnoif(@grade ='')Print @sno+@sname+@cname+'null'else if(@grade >= 90)Print @sno+@sname+@cname+@gradeelse if(@grade >=80)Print @sno+@sname+@cname+'良'else if(@grade >=70)Print @sno+@sname+@cname+'中'else if(@grade >=60)Print @sno+@sname+@cname+'及格'elsePrint @sno+@sname+@cname+'不及格'Fetch Next From SCursor Into @sno,@cno,@gradeEndClose SCursorDeallocate Scursorgo结果描述:2、游标的使用。
数据库实验六:游标的使用一、实验目的与要求:1.实验目的(1)理解SQL的宿主使用方式。
(2)掌握游标的使用方法。
2.实验要求(1)参考例7-3建立一个嵌套游标应用,其功能是按学号升序列出全体学生信息(学号、姓名、院系名称)及其所修课程的名称和考试成绩信息(基于前面实验建立的表和插入的数据)(2)按要求逐一读出游标中的记录,并在界面上显示。
(3)可以交互对记录进行修改。
二、实验内容1、实验原理(1)定义游标的SQL语句的一般格式是:DECLARE <游标名> [INSENSITIVE] [SCROLL] CURSORFOR <SELECT-查询块>[FOR {READ ONLY | UPDATE [OF <列名>[,<列名>…]]}](2)打开游标的SQL语句的一般格式是:OPEN <游标名>(3)从游标中读记录的SQL语句的一般格式是:FETCH [[NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ] FROM ] <游标名>[INTO: <主变量1>,:<主变量2>…](4)关闭游标的SQL语句的一般格式是:CLOSE <游标名>(5)释放游标DEALLOCATE <游标名>(6)使用游标的UPDATE命令的格式是:UPDATE <表名>SET <列名>={<表达式>| NULL }[,<列名>={<表达式>| NULL }…]WHERE CURRENT OF <游标名>(7)使用游标的DELETE命令的格式是:DELETE FROM <表名>WHERE CURRENT OF <游标名>2、实验步骤与结果(1)调出SQL Server2005软件的用户界面,进入SQL SERVER MANAGEMENT STUDIO。
x x大学计算机与信息技术学院实验报告姓名学号专业班级课程名称数据库系统概论实验日期成绩指导教师批改日期实验名称游标的使用一、实验目的:•掌握游标的使用方法•掌握使用游标逐行操作SELECT语句结果集的数据的技能二、实验内容:•游标声明•打开游标•读取数据•关闭游标•释放游标三、实验步骤:(一)使用游标的几个步骤:1、声明游标。
使用T-SQL语句生成一个结果集,并且定义游标的特征,如游标中的记录是否可以修改;2、打开游标3、推进游标指针,从游标的结果集中提取数据,从游标中检索一行或多行数据成为提取数据。
4、逐行处理游标指针所指向的行数据。
5、关闭和释放游标。
例1、利用标准方式声明一个名称为“student”的游标use 学生选课declare student cursorforselect Sno,Sname,sageFROM studentWHERE sage=19FOR READ ONLYGOopen student // 打开gofetch next from student //从游标中读取数据goclose student // 关闭deallocate student // 删除例2:声明一个名称为Xuanke的游标use 学生选课/*声明一个名称为Xuanke的游标*/ DECLARE XUANKE CURSOR DYNAMIC /*动态的,动力的*/ FORSELECT Sno,GradeFROM SCWHERE Cno='1'FOR UPDATE OF SnoGO/*打开XUANKE游标*/OPEN XUANKEGO/*从XUANKE游标中读取数据*/ FETCH NEXT FROM XUANKEGO/*关闭XUANKE游标*/CLOSE XUANKE/*删除XUANKE游标*/ DEALLOCATE XUANKE例3:声明一个游标,可前后滚动,可对选课表2中的成绩进行修改use 学生选课/*声明一个游标,可前后滚动,可对选课表中的成绩进行修改use 学生选课*/DECLARE XK CURSORFOR SELECT*FROM SCFOR UPDATE OF Grade/*打开游标XK*/OPEN XKSELECT'游标数据行数'=@@CURSOR_ROWS/*全局变量@@CURSOR_ROWS返回最后打开的游标中当前存在的合格行的数量。
Oracle 数据库实验报告系别:*******班级:*******姓名:*******学号:*******指导老师:****一.实验名称用带参数游标的FOR循环依此输出每一个部门名称,在部门名称的下面输出该部门的员工姓名和工资,按工资的升序排列。
二.实验目的通过本次实验,逐渐熟悉oracle数据库的应用及输出的格式,更加深刻的了解其输出的语法,变量的定义及赋值和操作环境以及循环结构,异常的捕获,定义,处理,Oracle数据库中表的创建,插入,及表中所需数据的提取,掌握游标的定义,使用。
三.实验步骤开始——运行输入cmd,出来oracle运行界面,代码如下:DECLARE --变量,游标的声明;CURSOR dept_cursor IS SELECT Dname,Deptno FROM DEPT; --游标的定义;CURSOR emp_cursor(v_dept CHAR) IS SELECT Ename,Salary FROM EMP WHERE deptno=v_dept ORDER BY Salary;--按工资升序排序格式输出;BEGINFOR dept_record IN dept_cursor LOOP --for循环,查询的结果单独的输出;DBMS_OUTPUT.PUT_LINE('部门名称为:'||dept_record.Dname||chr(10)||'部门编号:'||dept_record.Deptno); --输出语句;FOR emp_record IN emp_cursor(dept_record.Deptno) LOOP DBMS_OUTPUT.PUT_LINE('员工姓名为:'||emp_record.Ename||'员工工资为:'||emp_record.Salary); END LOOP;END LOOP;END;/四.实验结果五.实验总结通过这次的上机实验,我学到了很多很多,更加了解oracle 数据及运行环境,变量定义,变量的赋值,语句的嵌套,循环的应用,异常的分类,异常的定义,异常的处理,Oracle数据库中表的创建,插入,及表中所需数据的提取,游标的定义,使用。
实验五游标实验报告[实验目的]1.了解和掌握游标的使用;2.了解和掌握使用循环处理游标的技术;3.熟悉和巩固PL/SQL程序设计。
[预备知识]1.PL/SQL程序块的设计2.游标的声明,打开,读取,关闭3.循环处理[实验原理]1.游标的声明可以通过在PL/SQL 程序块的声明部分命名游标,将它与某个查询关联来定义一个游标CURSOR <游标名> IS<SELECT statement>;示例CURSOR emp_cur ISSELECT empno, ename, job, salFROM emp;2.游标的操作a.open游标OPEN <游标名>示例OPEN emp_cur;b.fetch游标FETCH <游标名> INTO var1, …, varN;或者FETCH <游标名> INTO record_variable;示例FETCH emp_cur INTO mrec;c.close游标CLOSE <游标名>;示例CLOSE emp_cur;3.游标的属性a.%NOTFOUND如果因为没有多行而使最后的FETCH 失败,则判定为TRUE;如果最后的FETCH 返回一行,则判定为FALSE。
b.%FOUND如果最后的FETCH 返回一行,则判定为TRUE;如果因为没有多行而使最后的FETCH 失败,则判定为FALSE 。
c.%ROWCOUNT返回当前从活动集合获取的行数d.%ISOPEN如果打开显示游标,则判定为TRUE;如果关闭显示游标,则判定为FALSE。
4.使用循环处理游标,下面的例程中c_class为游标,v_class为游标列变量,即类型为c_class%rowtype;a.简单循环open c_class;loopfetch c_class into v_class;exit when c_class%notfound;…end loop;close c_class;b.while循环open c_class;fetch c_class into v_class;while c_class%found loop…fetch c_class into v_class;end loop;close c_class;c.for循环for v_class in c_class loop…end loop;[实验内容]1.依据实验三的表,编写一个程序,将读取所有的借款,借款额大于1500,则将这个借款额增加5%;如果借款额大于800,小于等于1500,则将这个借款增加8%;如果借款额小于80,则将这个借款增加80。
实验九游标与存储过程1 实验目的与要求(1) 掌握游标的定义和使用方法。
(2) 掌握存储过程的定义、执行和调用方法。
(3) 掌握游标和存储过程的综合应用方法。
2 实验内容请完成以下实验内容:(1) 创建游标,逐行显示Customer表的记录,并用WHILE结构来测试@@Fetch_Status 的返回值。
输出格式如下:'客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码' declare @cno char(9),@cname varchar(20),@tele varchar(20),@addr varchar(12),@zi char(7)declare @text varchar(180)declare cus_cur scroll cursor forselect customerNo,customerName,telephone,address,zipfrom customerorder by customerNoset@text='===============================customer======================= ====================='print @textset @text='客户编号'+' '+'客户名称'+' '+'客户电话'+' '+'客户住址'+' '+'邮政编码'print @textopen cus_curfetch cus_cur into @cno,@cname,@tele,@addr,@ziwhile(@@fetch_status=0)beginset @text = @cno+' '+@cname+''+space(2*(9-len(@cname)))+@tele+' '+@addr+' '+@ziprint @textfetch cus_cur into @cno,@cname,@tele,@addr,@ziendclose cus_curdeallocate cus_cur(2) 利用游标修改OrderMaster表中orderSum的值。
实验六游标操作
一、实验目的
使学生加深对游标概念的理解,掌握游标的定义、使用方法查询、修改删除数据的方法
二、实验内容
(1)利用游标逐行显示所查询的数据块的内容。
(2)利用游标显示指定行的数据内容。
(3)利用游标修改和删除指定的数据元组。
三、实验指导
1、利用游标逐行显示数据
实验在JXGL数据库的S表中定义一个包含sno,、sname、age 、sex、sdept的滚动游标,游标的名称为“S_cursor”,并将游标中的数据逐条显示出来。
(1)在数据库引擎查询文档中输入以下语句:
实验在S表中定义一个所在系为CS ,包含sno、sname、sex、age、
Sdept的游标,游标的名称为cs_cursor,完成以下操作:
1、读取第一行数据;
3、利用游标修改数据
实验在S表中定义一个所在系部为CS,包含sno, sname,sex 的游标,灖垢名称为cs_sursor,并将游标中的绝对位置为2 的学生的姓名改为“王南”,性别改为“女”。
4、利用游标删除数据
实验在S表中定义一个包含学号、姓名、性别、的游标,灖垢名称为cs_cursor
并将游标中的绝对位置为2的学生数据删除。
5、利用游标遍历数据表
实验在S、SC表中定义一个包含学号、姓名和成绩的游标,游标的名称为cs_cursor,
将游标遍历整个数据表(经常使用系统变量@@fetch_status来控制WHILE循环中的游标活动)
6、利用游标备份数据库
实验利用游标在串行状态下执行用户数据库文件备份。
实验六游标操作和应用
实验目的和任务
1)理解游标的概念
2)掌握定义、使用游标的方法
3)会用游标解决比较复杂的问题
实验内容
1)定义及使用游标
针对员工表定义一个只读游标“CUR1_游标”,逐行显示员工的所有信息。
2)使用游标修改数据
针对员工表定义一个游标“CUR2_游标”,将游标中绝对位置为3的员工姓名改为“杜兰特”,性别改为“男”。
3)使用游标删除数据
定义一个游标“CUR3_游标”,将员工表中名为“杜兰特”的员工删掉。
4)针对项目管理数据库,设计嵌套游标,外层游标“CUR41_游标”显示每个员工的员工号、员工姓名、技术职称,所在部门,内层游标“CUR42_游标”逐个显示当前员工所参加的项目的情况,包括项目号、项目名称、承担职责。
5)在员工表中增加一列“参加的项目总数”。
创建游标“CUR5_游标”,利用游标在员工参与项目表中统计员工参加的项目数,然后将参加的数目填入员工表中的参加的项目总数列中。
问题思考
1)全局游标和局部游标有什么区别?
2)游标的主要作用是什么?
3)游标的使用步骤有哪些?。
数据库系统原理实验报告实验名称:视图和游标操作的实验任课教师:霍纬刚学号:100341324姓名:汪何媛完成日期:2012.11.3实验名称:视图和游标操作的实验一、实验目的1、理解视图的作用,能够根据实际需求用SQL创建视图2、对基本表按需定义视图,并理解可以通过视图实现对基本表的操作3、通过QRACLE环境下的游标操作,理解SQL的游标概念;4、综合运用SQL的DML命令,通过游标操作数据库。
二、实验内容与步骤1、进入QRACLE的SQL*PLUS环境;2、用于Create view语句定义视图;(1)建立信息系学生的视图,然后向其中插入一计算机系学生数据,分别查看视图和基本表;(2)建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系学生,然后向其中插入一计算机系学生,比较(1),(2)的不同;(3)建立信息系选修了1号课程且成绩在90分以上的学生的视图;(4)将学生的学号及他的平均成绩定义为一个视图S_G;(5)将SC表中成绩在相应课程平均成绩之上的元组定义成一个视图GOOD-SC;3、通过视图对表进行操作(1)在信息系学生的视图中找出年龄小于20岁的学生;(2)查询信息系选修了1号课程且成绩在90分以上的学生;(3)在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩;(4)创建CS-KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩,要保证对该视图的修改都要符合专业名为“计算机”这个条件;(5)查找计算机专业的学生学号和选修的课程号;(6)向S-G视图中插入一元组。
4、游标的操作(1)用简单循环控制从EMP表中取出某一部门的员工姓名和工资,存入TEMP表中;(2)采用FOR循环重做上题;(3)游标的FOR循环内使用查询;(4)查询EMP表某部门的雇员情况,如果某雇员的工资小于800,掌握将其工资设为800;(5)为职工涨10%的工资。
从最低工资开始涨,最后工资总额限制在50万元以内;(6)根据DEPT表中返回的部门号,从EMP表中查询该部门的雇员情况,使用带参数的游标;(7)统计EMP表中工资大于3000的记录数,而且给工资增长10%。
SQL Server数据库中游标使用的分析与探讨的研究报告SQL Server数据库中游标使用的分析与探讨的研究报告一、背景在SQL Server中,游标是一种处理数据的方式,它允许程序员按照某种顺序访问数据行。
与SET-based的MySQL不同,SQL Server并不直接支持游标。
因此,在使用游标时,需借助于Transact-SQL编程语言中的游标API和一些编程技巧来实现。
游标在某些情况下可以方便地完成一些常规操作,但也因此带来了性能上的损耗。
二、游标的使用方法游标典型的用法是在存储过程中进行行迭代,比如需要对一张表进行操作时,需要遍历整个表。
游标一共分为四个步骤:声明,打开,获取,关闭。
1.声明游标DECLARE cursor_name CURSORFOR select_statement游标声明需提供游标名称和SQL语句,用以声明在之后的迭代中使用的结果集。
在声明游标之后,SQL Server会对结果集建立临时表或类似结构,以用于后续的操作。
2.打开游标OPEN cursor_name在打开游标操作之前,结果集是无法被访问的。
打开操作允许游标在结果集中定位和访问行数据。
在打开之后,游标引擎立即定位到第一个数据行之前,等待获取操作。
3.获取数据FETCH NEXT FROM cursor_nameINTO @variable_name1 [,@variable_name2 ...]FETCH命令用于通过游标获取数据行。
当使用FETCH命令时,游标会定位到结果集的下一行,可以通过INTO命令将数据行的值存储在用户定义的变量中供之后使用。
4.关闭游标CLOSE cursor_nameDEALLOCATE cursor_name当使用完游标后,请关闭游标并释放资源以避免资源浪费。
CLOSE命令关闭游标,但不会释放与此游标相关的任何资源。
DEALLOCATE命令用于释放资源。
三、游标的使用场景游标可以对表数据进行迭代和操作,比如在存储过程中需要对每一行进行处理、每行数据进行计算等操作时,可以考虑使用游标。
《数据库原理》实验报告要求报告的主要内容一、实验目的根据各实验项目的实验目的撰写,具体在附件中给出。
二、实验环境操作系统:Windows XP,数据库管理系统(DBMS):SQL Server2008三、实验要求根据各实验项目要求撰写,具体在附件中给出。
四、实验内容及完成情况自己所完成的内容,进行了哪些操作、编写了哪些程序及执行后的结果,包括一些错误结果及解决办法等。
五、实验体会具体要求1、本实验属综合性实验,要使用学校统一的报告纸,附加纸张要挟在报告纸内并左侧装订;2、报告纸的封面要填写完整,项目要与实验日历中的项目完全一致,否则将返回重写;3、报告第四项“实验内容及完成情况”中,只允许对操作结果和程序运行结果进行打印,其余内容必须用钢笔或水性笔书写,报告要整洁;4、严禁出现雷同报告,如果出现雷同,雷同报告的所有学生本次实验将作不及格或最低分处理。
如果出现不及格实验项目将取消考试资格。
实验目的及要求实验三、存储过程及游标实验目的:综合运用程序设计和数据结构,使用游标完成具有较完整功能的存储过程。
实验要求:根据所给的excel表格,完成实验内容。
说明:“招生表”中部分属性保存的是代码值,请按所给代码表完成如下要求。
1.使用SQL语句创建数据库,并在数据库中完成表的创建。
(报告中要分析各个表的主键和外键是什么)创建数据库studentManage2.写一个存储过程,功能是查询所有招生信息。
使用游标完成逐行输出,每行要有行号。
(在查询结果中,要求各类代码要替换成具体的文字信息,例如:政治面貌不要显示“01”,而要显示“中共党员”。
)3.写一个触发器,当“录取专业代码-名称”表的“代码”发生变动时,“招生表”中对应的信息也要修改,来维护数据的一致性。
(注:可编辑下载,若有不当之处,请指正,谢谢!)。
实验七 T-SQL程序设计与游标设计一、实验目的1.掌握Transact-SQL语言极其程序设计的方法;2.掌握T-SQL游标的使用方法。
二、实验内容与要求1.T-SQL程序设计逻辑Transact-SQL是SQL Server对标准SQL语言的扩充。
Transact-SQL是SQL Server对标准sQI.语言的扩充。
它引入了程序设计的思想,增加了程序的流程控制语句。
Transact-SQL语言最主要的用途是设计服务器端的能够在后台执行的程序块,如存储过程、触发器等。
(1)变量Transact-SQL中可以使用两种变量:局部变量和全局变量。
局部变量。
局部变量是用户可自行定义的变量,它的作用范围是在程序内部,一般用来存储从表中查询到的数据,或作为程序执行过程中的暂存变量。
局部变量必须以@开头,且必须先用DECLARE命令加以说明后才可使用。
全局变量。
全局变量是SQL Server系统内部使用的变量,其作用范围并不局限于某一程序,而是所有程序都可随时调用。
全局变量通常存储一些SQL Server的配置设定值和效能统计数据。
引用全局变量必须以@@开头。
(2)流程控制命令BEGIN…ENDIF…ELSE…CASEWHILE…CONTINUE…BREAKWAITFORGOTORETURN(3)其他命令BACKUP.CHECKPOINT.DBCC.DECLARE.EXECUTE.KILL.PRINT.RAISERROR.READTEXT.RESTORE.SELECT.SET.SHUTDOWi\l.WRITETEXT.USE.(4)常用函数统计函数算术函数字符串函数数据类型转换函数日期函数TEXT函数和IMAGE函数用户自定义函数1.1计算1—100之间所有能被3整除的数的个数和总和(1)启动SSMS。
(2)创建T-SQL程序:在查询编辑器窗口中输入下列程序:DECLARE @SUM SMALLINT, @I SMALLINT, @NUMS SMALLINTSET @SUM=0SET @I=1SET @NUMS=0WHILE (@I<=100)BEGINIF (@I%3=0 )BEGINSET @SUM=@SUM+@ISET @NUMS=@NUMS+1ENDSET @I=@I+1ENDPRINT '总和是:' + STR( @SUM )PRINT '个数是:' + STR( @NUMS )(3)执行T-SQL,执行结果如图1-1所示。
数据库实验八实验八实验名称:游标的建立与使用〔2课时〕一、实验目的理解游标的概念、定义方法和使用方法。
二、实验环境采用Client/Server模式,学生为客户端,是MS SQL SERVER 2000的中文客户端。
登录用户名是:学号;密码为:****** 。
用户名和密码以任课老师给出为准。
三、实验内容与步骤1、利用游标查找所有女业务员的根本情况。
2、创立一游标,逐行显示表customer.的记录,并且用WHILE结构来测试游标的函数@@FETCH_STATUS的返回值四、实验结果1. 利用游标查找所有女业务员的根本情况。
〔1〕说明游标首先敲入语句:declare cu scroll cursor forselect * from employee where sex='F' order by emp_no实验结果为:〔2〕翻开游标再敲入语句: open cuselect \翻开状态\=@@ERROR select \内数据条数\=@@cursor_rows实验结果为:〔3〕推进游标指针并取当前记录最后敲入语句:fetch next from cuwhile(@@FETCH_STATUS=0) begin fetch next from cu endselect \读取状态\=cursor_status('variable','@cu')2. 创立一游标,逐行显示表customer.的记录,并且用WHILE结构来测试游标的函数@@FETCH_STATUS的返回值〔1〕说明游标首先敲入语句: declare cust scroll cursor forselect *from customer order by cust_id实验结果为:〔2〕翻开游标再敲入语句:open custselect \翻开状态\=@@ERROR select \内数据条数\=@@cursor_rows 实验结果为:〔3〕推进游标指针并取当前记录最后敲入语句:fetch next from custwhile(@@FETCH_STATUS=0) beginfetch next from custselect \值\=@@FETCH_STATUS endselect \读取状态\=cursor_status('variable','@cust') 实验结果为:实验总结:通过此次实验,我对于游标的概念、定义方法有了进一步的理解,对于使用方法更加清晰明了,对游标的使用更加熟悉。
数据库实验八存储过程和游标一、实验目的1.了解存储过程和游标的基本概念和用法;2.掌握存储过程的创建与调用;3.掌握游标的创建、打开、关闭和使用。
二、实验内容本实验涉及两个部分,第一部分是存储过程的创建与调用,第二部分是游标的创建、打开、关闭和使用。
三、实验步骤1.存储过程的创建与调用首先,创建一个学生表(student),包含字段(id, name, age),并插入一些测试数据。
```sqlCREATE TABLE studentid INT PRIMARY KEY,name VARCHAR(20) NOT NULL,age INT NOT NULLINSERT INTO student (id, name, age) VALUES (1, 'Tom', 18);INSERT INTO student (id, name, age) VALUES (2, 'Jerry', 20);INSERT INTO student (id, name, age) VALUES (3, 'Alice', 19);INSERT INTO student (id, name, age) VALUES (4, 'Bob', 22);```然后,创建一个存储过程(get_student_list),用于查询年龄小于等于指定值的学生列表,并按照年龄降序排序。
```sqlDELIMITER//CREATE PROCEDURE get_student_list(IN max_age INT)BEGINSELECT id, name, age FROM student WHERE age <= max_age ORDER BY age DESC;END//DELIMITER;```存储过程创建完成后,可以使用CALL语句调用存储过程,并传入参数。
```sqlCALL get_student_list(20);```2.游标的创建、打开、关闭和使用首先,创建一个存储过程(get_student_name),用于查询年龄小于等于指定值的学生姓名,并输出到结果集。
实验十二游标的使用姓名:廖冬凤学号:20070721140专业:网络工程班级:07网络(1)班同组人:无实验日期:2009-11-27【实验目的与要求】1.掌握使用SQL-92语法和T-SQL扩展声明游标,并理解相关参数含义。
2.掌握游标的使用过程。
【实验内容与步骤】12.1、声明游标(1)使用SQL-92语法声明一只进只读游标CUR1:要求结果集2004年3月18日销售情况。
(2)使用T-SQL扩展声明一滚动动态游标CUR2:要求结果集为客户信息,并能通过该游标修改客户名称列。
12.2、打开游标打开CUR2游标。
12.3、读取游标中数据编写程序,实现依次读取游标CUR2中各行数据。
SQL语句:DECLARE @客户编号char(6),@客户名称char(30),@地区char(10),@负责人char(8),@电话char(12)print '游标结果集中的记录总数为'+cast(@@cursor_rows as varchar (10)) fetch nextfrom CUR2into @客户编号,@客户名称,@地区,@负责人,@电话while @@fetch_status=0beginprint '客户编号:'+cast(@客户编号as char(6))+' 客户名称:'+cast(@客户名称as char(30))+' 地区:'+cast(@地区as char(10))+' 负责人:'+cast(@负责人as char(8))+'电话:'+cast(@电话as char(12))fetch nextfrom CUR2into @客户编号,@客户名称,@地区,@负责人,@电话end12.4、关闭游标关闭CUR2游标。
12.5、释放游标释放CUR2游标。
【实验练习】编写程序,用游标实现从CP表中读取产品编号、产品名称和价格,并将价格在1000-3000(不包含1000和3000)之间的产品名称和价格输出。
x x大学计算机与信息技术学院实验报告姓名学号专业班级课程名称数据库系统概论实验日期成绩指导教师批改日期实验名称游标的使用一、实验目的:•掌握游标的使用方法•掌握使用游标逐行操作SELECT语句结果集的数据的技能二、实验内容:•游标声明•打开游标•读取数据•关闭游标•释放游标三、实验步骤:(一)使用游标的几个步骤:1、声明游标。
使用T-SQL语句生成一个结果集,并且定义游标的特征,如游标中的记录是否可以修改;2、打开游标3、推进游标指针,从游标的结果集中提取数据,从游标中检索一行或多行数据成为提取数据。
4、逐行处理游标指针所指向的行数据。
5、关闭和释放游标。
例1、利用标准方式声明一个名称为“student”的游标use 学生选课declare student cursorforselect Sno,Sname,sageFROM studentWHERE sage=19FOR READ ONLYGOopen student // 打开gofetch next from student //从游标中读取数据goclose student // 关闭deallocate student // 删除例2:声明一个名称为Xuanke的游标use 学生选课/*声明一个名称为Xuanke的游标*/ DECLARE XUANKE CURSOR DYNAMIC /*动态的,动力的*/ FORSELECT Sno,GradeFROM SCWHERE Cno='1'FOR UPDATE OF SnoGO/*打开XUANKE游标*/OPEN XUANKEGO/*从XUANKE游标中读取数据*/ FETCH NEXT FROM XUANKEGO/*关闭XUANKE游标*/CLOSE XUANKE/*删除XUANKE游标*/ DEALLOCATE XUANKE例3:声明一个游标,可前后滚动,可对选课表2中的成绩进行修改use 学生选课/*声明一个游标,可前后滚动,可对选课表中的成绩进行修改use 学生选课*/DECLARE XK CURSORFOR SELECT*FROM SCFOR UPDATE OF Grade/*打开游标XK*/OPEN XKSELECT'游标数据行数'=@@CURSOR_ROWS/*全局变量@@CURSOR_ROWS返回最后打开的游标中当前存在的合格行的数量。
返回值为-m,表示游标被异步填充。
返回值-m是键集中当前的行数。
返回值为-1,表示游标为动态。
因为游标可反映所有更改,所以符合游标的行数不断变化。
因此永远不能确定地说所有符合条件的行均已检索到。
返回值为,没有被打开的游标,没有符合最后打开的游标的行,或最后打开的游标已被关闭或被释放。
返回值为n,游标已完全填充。
返回值n是在游标中的总行数。
@@ROWCOUNT返回受上一语句影响的行数。
任何不返回行的语句将这一变量设置为.*//*从游标XK中读取数据*/FETCH NEXT FROM XK/*关闭游标XK*/close XKdeallocate XK例4:为学生表中姓“李”的同学的行声明游标,并使用FETCH NEXT逐个提取这些行。
(SCROLL 指定所有的提取选项FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE均可使用)use 学生选课/*为学生表中姓“李”的同学的行声明游标,并使用FETCH NEXT逐个提取这些行。
(SCROLL 指定所有的提取选项FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE均可使用)use 学生选课*/DECLARE STU SCROLL CURSORFORSELECT SnameFROM StudentWHERE Sname LIKE'李%'ORDER BY SnameGOOPEN STUFETCH NEXT FROM STUWHILE@@FETCH_STATUS=0BEGINFETCH NEXT FROM STUENDclose STU/*@@FETCH_STATUS返回针对连接当前打开的任何游标发出的上一条游标FETCH 语句的状态。
0 FETCH 语句成功。
-1 FETCH 语句失败或行不在结果集中。
-2 提取的行不存在*/例5:创建一个SCROLL游标,使其通过LAST, PRIOR, RELATIVE, ABSOLUTE 选项支持所有滚动能力。
/*创建一个SCROLL游标,使其通过LAST, PRIOR, RELATIVE, ABSOLUTE 选项支持所有滚动能力。
NEXT:返回当前行的下一行,并使其为当前行。
如果FETCH NEXT是对游标的第一次提取操作,则返回结果集中的第一行。
NEXT为默认的游标提取选项。
PRIOR:返回当前行的前一行,并使其为当前行。
如果FETCH PRIOR是对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。
FIRST:返回游标中的第一行并将其作为当前行。
LAST:返回游标中的最后一行并将其作为当前行。
ABSOLUTE{n/@nvar}:如果n或@nvar为正数,返回从游标头开始的第n行并将返回的行变成新的当前行;如果n或@nvar为负数,返回游标尾之前的第n行并将返回的行变成新的当前行;如果n或@nvar为,则没有行返回。
n必须为整形常量且@nvar必须为smallint, tinyint 或int。
RELATIVE{n/@nvar}:如果n或@nvar为正数,返回当前行之后的第n行并将返回的行变成新的当前行;如果n或@nvar为负数,返回当前行之前的第n行并将返回的行变成新的当前行;如果n或@nvar为,返回当前行;如果对游标的第一次提取操作时将FETCH RELATIVE 的n或@nvar指定为负数或,则没有行返回。
n必须为整形常量且@nvar必须为smallint, tinyint 或int。
use 学生选课*/declare student scroll cursorforselect Sname,SageFROM Studentopen studentfetch last from studentfetch prior from studentfetch absolute 2 from studentfetch relative 3 from studentfetch relative -2 from studentdeallocate(二)使用游标修改数据UPDATE和DELETE都是集合操作语句,如果只想修改或删除其中某个记录,则需要用带游标的SELECT语句查出所有满足条件的记录,从中进一步找出要修改或删除的记录,然后用CURRENT形式的UPDATE 和DELETE 语句修改或删除之。
具体步骤:1、用DECLARE语句声明游标,并指定FOR UPDATE OF column_name_list。
2、用OPEN语句打开游标。
3、用FETCH语句推进游标指针。
4、检查记录是否是需要修改或删除的记录。
5、处理完毕用CLOSE语句关闭游标。
用户可以在UPDATE 或DELETE 语句中使用游标来更新或删除表或视图中的行,但不能用来插入新行。
例6:统计“数据结构”课程考试成绩的各分数段的分布情况。
use 学生选课declare course cursorforselect Grade from SCwhere Cno=(select Cno from Coursewhere Cname=' Data structure')declare @p_100 smallint,@p_90 smallint,@p_80 smallint declare @p_70 smallint,@p_60 smallint,@p_others smallint declare @p_grade smallintset @p_100=0set @p_90=0set @p_80=0set @p_70=0set @p_60=0set @p_others=0set @p_grade=0open courseloop:fetch next from course into @p_gradeif(@p_grade=100)set @p_100=@p_100+1else if(@p_grade>=90)set @p_90=@p_90+1else if(@p_grade>=80)set @p_80=@p_80+1else if(@p_grade>=70)set @p_70=@p_70+1else if(@p_grade>=60)set @p_60=@p_60+1else set @p_others=@p_others+1if(@@FETCH_STATUS=0)goto loopprint str(@p_100)+','+str(@p_90)+','+str(@p_80)+','print str(@p_70)+','+str(@p_60)+','+str(@p_others)close coursedeallocate course例7:定义一个游标,将学生表中所有学生的姓名、年龄显示出来。
use 学生选课godeclare @sname varchar(50),@sage intdeclare stud scroll cursorforselect Sname,Sage from Studentfor read onlyopen studfetch from stud into @sname,@sagewhile@@FETCH_STATUS=0beginprint'学生姓名:'+@sname+' '+'学生年龄:'+str(@sage) fetch from stud into @sname,@sageendclose studdeallocatestud例8:通过游标将学生表中第5位学生的年龄由19改为21 use 学生选课godeclare stu scroll cursorforselect Sname, Sage from Studentfor update of Sageopen stufetch absolute 5 from stuupdate Studentset Sage=21where current of stufetch absolute 5 from stuclose studeallocate stu三、结果分析(或者实验体会)本次试验学习了游标的使用,在老师的指导下通过在SQL Server 2005上对一些相关的例题进行操作了解并掌握了游标的使用方法。