欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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

【2019-2020春学期】数据库作业17:SQL练习9 - CURSOR

运行结果
【2019-2020春学期】数据库作业17:SQL练习9 - CURSOR

在存储过程中,先声明变量@Sno、@Sname用于后面读取数据分别存储Sno,Sname。再声明游标,打开游标,先取出一条游标数据Sno、Sname放入@Sno、@Sname,此时游标移动到下一条数据位置。再通过循环输出,取出数据达到遍历效果,将表中数据逐一输出。

T-SQL中使用游标与上面完整的例子差不多

心得体会
总的来说感觉不难理解,因为之前的学习也有涉及过类似的内容,一起想很容易就理解了。但是要熟练掌握(直接打出代码)得好好记忆,根据步骤记住代码有助于熟练掌握。

相关标签: sqlserver