实验十三 游标使用基础
姓名: 专业: 同组人:
方令 网络工程 无
学班
号级
: :
0807022205
2 2011.11.19
实验日期:
【实验目的与要求】
1. 理解游标的概念。
2. 熟悉游标的工作机制及游标的使用
【实验内容与步骤】 13.1. 游标的使用
1. 使用游标依次提取数据
阅读以下程序,理解游标声明与使用的基本方法和过程。
Declare CP_csr_getdata cursor for
select 产品编号,产品名称,价格,库存量 from CP
where 价格>=1200 order by 价格 --打开游标
OPEN CP_csr_getdata --执行第一次取数操作
FETCH next From CP_csr_getdata --检查以确定是否还可以继续取数 while @@FETCH_STATUS=0 BEGIN
FETCH next From CP_csr_getdata END
--关闭游标
close CP_csr_getdata --释放游标
deallocate CP_csr_getdata
运行结果:
第 1 页 共 6 页
2. 使用游标提取数据
以下程序段使用游标提取查询结果集中不同位置的数据,请阅读并理解其中游标的作用。
declare CP_csr scroll cursor for
select 产品编号,产品名称,价格,库存量 from CP
where 价格>=1200 order by 价格 --打开游标 open CP_csr
--提取数据集中的最后一行 fetch last from CP_csr
--当前游标所在行的上一行 fetch prior from CP_csr --提取数据集中的第四行 fetch absolute 4 from CP_csr --提取第二行
fetch relative -2 from CP_csr --数据集中的第一行 fetch first from CP_csr --关闭游标 close CP_csr --释放游标
deallocate CP_csr 运行结果:
第 2 页 共 6 页
3. 使用游标读取数据到变量中并输出
declare @product_ID char(6) --声明变量product_ID declare @product_Name char(30) --声明变量product_Name declare CP_csr_getdata cursor for
select 产品编号,产品名称 from CP
where 价格>=1200 order by 价格 --打开游标
OPEN CP_csr_getdata
--执行第一次取数操作,将查询得到的产品编号和
--产品名称分别存于变量product_ID和product_Name中 FETCH next From CP_csr_getdata into @product_ID,@product_Name --检查以确定是否还可以继续取数
while @@FETCH_STATUS=0 --@@开始的变量表示全局变量 BEGIN
print @product_ID+' '+@product_Name --遍历游标行,输出相应的值 FETCH next From CP_csr_getdata into @product_ID,@product_Name END
第 3 页 共 6 页
--关闭游标
close CP_csr_getdata --释放游标
deallocate CP_csr_getdata
运行结果:
.4. 使用游标更新数据
以下程序段实现的是使用游标更新CP表中价格<=1200的数据记录行,将其价格变为原来价格的1.5倍。
declare CP_csr_updatedata cursor for
select 产品编号,产品名称,价格 from CP
where 价格<=1200 order by 价格 for update of 价格 --打开游标
OPEN CP_csr_updatedata --执行第一次取数操作 FETCH CP_csr_updatedata
--检查以确定是否还可以继续取数
第 4 页 共 6 页
while @@FETCH_STATUS=0 BEGIN
update CP
set 价格=价格*1.5
where current of CP_csr_updatedata fetch CP_csr_updatedata END
--关闭游标
close CP_csr_updatedata --释放游标
deallocate CP_csr_updatedata
运行结果:
13.2. 实验练习:
编写程序,定义游标CP_Cursor,用以实现实现从CP表中读取产品编号、产品名称和价格,并遍历游标将价格在1000-3000(不包含1000和3000)之间的产品名称和价格输出。
(1)给出T-SQL代码:
declare CP_Cursor cursor for
select 产品编号,产品名称,价格 from CP
where 价格>1000 and 价格<3000 order by 价格 OPEN CP_cursor
FETCH next from CP_cursor while @@FETCH_STATUS=0 BEGIN
fetch next from CP_cursor END
close CP_cursor deallocate CP_cursor
第 5 页 共 6 页
(2) 给出程序运行结果截图:
第 6 页 共 6 页