我又来了😁
这次的实验很简单,只有一个,就是对CURSOR 也就是游标 的使用
代码:
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
执行截图
Student表中数据
游标读出的结果与Student表中数据一致。
那么问题就来了,游标,啥是游标,所以接下来我就对游标做一个简单的介绍。
- 游标多应用于嵌入式SQL语句中,而所谓嵌入式SQL就是将SQL语句嵌入如C,C++,Java等程序设计语言中。这些语言就称为主语言
- 由于SQL是面向集合的,一条语句可以产生或处理多条语句,而主语言是面向记录的,一组主变量一次只能存放一条记录。不能满足要求,所以就有了游标。
- 游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字,用户可以通过游标逐一获取记录并赋给主变量,交由主语句进一步处理
- 使用游标之前应该需要说明游标
此时定义的游标只是一条说明性语句,这是关系数据库管理系统并不执行SELECT语句 - 打开游标进行操作,操作完成以后需要关闭游标
- 有些嵌入式SQL语句是不需要使用游标的,比如说:说明性语句、数据定义语句、数据控制语句、查询结果为单记录的SELECT语句、非CURRENT形式的增删改语句
- 而有些SQL语句是必须要使用游标的,比如说:查询结果为多条记录的SELECT语句、CURRENT形式的UPDATE 语句和DELETE语句
以查询结果为多条记录的SELECT语句为例,简要说明游标的使用步骤。
1)说明游标
DECLARE <游标名> CURSOR FOR <SELECT语句>
2) 打开游标
OPEN <游标名>
3)推进游标指针并取当前记录
FETCH<游标名>
INTO<主变量>[<指示变量>][<主变量>[<指示变量>]]··
4)关闭游标
CLOSE <游标名>
5)(可选)删除游标
DEALLOCATE <游标名>
一定要先关闭,再删除。
好了,结束,对,没了🤪
再见吧~~