【2019-2020春学期】数据库作业17:SQL练习9 - CURSOR
程序员文章站
2022-05-08 17:38:03
...
使用游标的原因:
· SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录
· 主语言是面向记录的,主变量一次只能存放一条记录
使用主变量并不能完全满足SQL语句向应用程序输出数据的要求,嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式
游标是系统为用户开设的数据缓冲区,存放SQL语句的执行结果
每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理
我觉得游标就是一个标记,它在数据中记录我们读取数据或写入数据进行到了哪里,可在标记位置继续操作。
使用游标的步骤
(1)说明游标
DECLARE 游标名 CURSOR FOR select Sno,Sname from Student // 游标每查询一组Sno,Sname为一条记录
(2)打开游标
OPEN 游标名
(3)推进游标指针并取当前记录
FETCH NEXT FROM 游标名 INTO 变量名 //取一条游标数据,放入变量中
(4)关闭游标
CLOSE 游标名 //关闭游标
DEALLOCATE 游标名 //删除游标
在SQLserver运行
IF (exists (select * from sys.objects where name = 'proc_cursor'))
DROP PROCEDURE proc_cursor
GO
CREATE PROCEDURE proc_cursor -- 存储过程
AS
DECLARE @Sno char(9)--定义变量
DECLARE @Sname char(20)--定义变量
DECLARE mycursor CURSOR FOR select Sno,Sname from Student --声明游标
OPEN mycursor --打开游标
FETCH NEXT FROM mycursor INTO @Sno,@Sname
WHILE(@@FETCH_STATUS=0) --遍历所有的数据
BEGIN
PRINT '游标成功取出一条数据:'
PRINT @Sno
PRINT @Sname
PRINT '********************'
FETCH NEXT FROM mycursor INTO @Sno,@Sname --取下一条游标数据
END
CLOSE mycursor --关闭游标
DEALLOCATE mycursor --删除游标
GO
EXEC proc_cursor
GO
运行结果
在存储过程中,先声明变量@Sno、@Sname用于后面读取数据分别存储Sno,Sname。再声明游标,打开游标,先取出一条游标数据Sno、Sname放入@Sno、@Sname,此时游标移动到下一条数据位置。再通过循环输出,取出数据达到遍历效果,将表中数据逐一输出。
T-SQL中使用游标与上面完整的例子差不多
心得体会
总的来说感觉不难理解,因为之前的学习也有涉及过类似的内容,一起想很容易就理解了。但是要熟练掌握(直接打出代码)得好好记忆,根据步骤记住代码有助于熟练掌握。
上一篇: 做奶油的方法
下一篇: 数据库小班讨论3-第四五六七章部分习题