数据库《游标的使用》实验报告

合集下载

实验 10.2 使用游标_数据库系统原理及应用(SQL Server 2012)_[共2页]

实验 10.2 使用游标_数据库系统原理及应用(SQL Server 2012)_[共2页]

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 数据库中 游标实验报告

Oracle 数据库中 游标实验报告

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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上对一些相关的例题进行操作了解并掌握了游标的使用方法。

相关文档
最新文档