数据库技术五(游标)

游标

基本内容:(1)游标的概念;(2)定义、使用游标的方法;(3)用游标解决比较复杂的问题。

  1. 针对选课表定义一个只读游标,逐条输出有成绩的记录的学号,开课号,成绩。要求游标输出数据时不反应打开游标后对基本表的修改。执行结果如下图所示:
DECLARE MYCUR INSENSITIVE CURSOR  --声明游标
FOR SELECT 学号,开课号,成绩 FROM 选课表
    WHERE 成绩 IS NOT NULL
OPEN MUCUR  --打开游标


DECLARE @XUEHAO VARCHAR(20),@KAIKEHAO VARCHAR(20),@CHENGJI VARCHAR(20) 
FETCH NEXT FROM MYCUR INTO @XUEHAO,@KAIKEHAO,@CHENGJI
WHILE @@FETCH_STATUS = 0
BEGIN
	PRINT '学号'+@XUEHAO
	PRINT '开课号'+@KAIKEHAO 
	PRINT '成绩 '+@CHENGJI 
	PRINT '---------------------'
	FETCH NEXT FROM MYCUR INTO @XUEHAO,@KAIKEHAO,@CHENGJI
END
CLOSE MYCUR
DEALLOCATE MYCUR  --释放游标
  1. 针对选课表定义一个只读游标,逐条输出有成绩的记录的学号,开课号,成绩(按成绩由高到低排序)。要求游标输出数据时不反应打开游标后对基本表的修改。执行结果如下图所示:
DECLARE MYCUR INSENSITIVE CURSOR  -声明游标
FOR 
SELECT 学号,开课号,成绩 FROM 选课表 
WHERE 成绩 IS NOT NULL ORDER BY 成绩 DESC
OPEN MYCUR  --打开游标


DECLARE @XUEHAO VARCHAR(20),@KAIKEHAO VARCHAR(20),@CHENGJI VARCHAR(20)
FETCH NEXT FROM MYCUR INTO @CUEHAO,@KAIKEHAO,@CHENGJI
WHILE @@FETCH_STATUS = 0
BEGIN
		PRINT '学号' @XUEHAO
		PRINT '开课号' @KAIKEHAO
		PRINT '成绩' @CHENGJI
		FETCH NEXT FROM MYCUR INTO @XUEHAO,@KAIKEHAO,@CHENGJI
END
CLOSE MYCUR
DEALLOCATE MYCUR  --释放游标
  1. 针对选课表定义一个只读游标,逐条输出有成绩的记录的学号,课程号,成绩(按成绩由高到低排序)。要求游标输出数据时反应打开游标后对基本表的修改。定义并打开游标后,通过其他连接将所有85的成绩修改为80,再逐条输出结果,执行结果如下图所示:
(注意:创建游标最好显式指定参数,如果采用SQL-92标准定义,需要指定SCROLL,
如果采用T-SQL标准定义,需要指定为SCROLL或DYNAMIC,否则游标会默认创建为
FAST_FORWARD,无法实现动态读取)
DECLARE MYCUR SCROLL CURSOR  --显式参数
FOR 
SELECT 学号,课程号,成绩 FROM 选课表 
WHERE 成绩 IS NOT NULL ORDER BY 成绩 DESC
OPEN MYCUR  --打开游标

UPDATE 选课表 SET 成绩=80 WHERE 成绩=85  --打开游标后更新

DECLARE @XUEHAO VARCHAR(20),@KAIKEHAO VARCHAR(20),@CHENGJI VARCHAR(20)
FETCH NEXT FROM MYCUR INTO @XUEHAO,@KAIKEHAO,@CHENGJI
WHILE @@FETCH_STATUS=0
BEGIN
		PRINT '学号'+@XUEHAO
		PRINT '开课号'+@KAIKEHAO 
	  PRINT '成绩 '+@CHENGJI 
  	FETCH NEXT FROM MYCUR INTO @XUEHAO,@KAIKEHAO,@CHENGJI
END
CLOSE MYCUR
DEALLOCATE MYCUR
  1. 针对学生表定义一个游标,将游标中绝对位置为3的学生姓名改为你的姓名,并将性别改为你的性别。
DECLARE MYCUR SCROLL CURSOR  --滚动游标
FOR
SELECT * FROM 学生表
FOR UPDATE
OPEN MYCUR


FETCH ABSOLUTE 3 FROM MYCUR
WHILE @@FETCH_STATUS=0
BEGIN
		UPDATE 学生表 SET 姓名 'aaa',性别='bbb'
		WHERE CURRENT OF MYCUR
END
CLOSE MYCUR
DEALLOCATE MYCUR

SELECT * FROM 学生表
  1. 针对选课表定义一个游标,输出最高成绩记录和最低记录(如果有并列的,只需要输出一条即可)。执行结果如下图所示:
DECLARE MYCUR SCROLL CURSOR  --滚动游标
FOR
SELECT * FROM 选课表
WHERE 成绩 IS NOT NULL ORDER BY 成绩 DESC
OPEN MYCUR

FETCH FIRST FROM MYCUR
FETCH LAST FROM MYCUR
CLOSE MYCUR
DEALLOCATE MYCUR

总结

游标的优点:

  1. 允许程序对由SELECT查询语句返回的行集中的每一次执行相同或
    相同的操作,而不是对整个集合执行同一个操作。
  2. 提供对基于游标位置中的行进行删除和更新的能力。
  3. 游标作为数据库管理系统和应用程序设计之间的桥梁,将两种
    处理方式连接起来。
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值