意义
个人理解是,游标能依次获得一个表的所有项,每次检查一项。利用游标,就不需要自己费时费力地一个个检查,就能快速检查表内是否有问题或者及时更新数据
语法
- declare 游标名 cursor for
- select语句
- open 游标名
- fetch 游标名 into 变量
- 嵌入式sql语句
- close 游标名
- dellocate 游标名
- end
解释
第二行的select语句,是声明游标的内容。游标可以粗暴的理解为最多只有一行的视图,类容就是select查询得到的。每次执行依次fetch,游标就会把信息替换为select结果中的下一行,同时把原数据丢给into后面的变量
当游标把select遍历一遍以后,系统提供的一个变量:@@fetch_status就会变为1
举例
- create or alter procedure check_boys
- as
- begin
- declare @a int
- declare @b int
- declare a_cursor cursor for
- select no,grade from student where sex='male'
- open a_cursor
- fetch a_cursor into into @a,@b
- when(@@fetch_status=0)
- begin
- if (@b>60)
- update student set status='Y' where no=@a
- else
- update student set status='N' where no=@a
- fetch next from a_cursor into @a,@b
- end
- close a_cursor
- dellocate a_cursor
- end
- check_boys
游标一般用在嵌入式sql语句类。这个事务借助游标,检查了所有男生的成绩。
第10行,检查@@fetch_status,检查游标是否向变量传递了数据。当这个数值变为1,说明游标没有给变量传递数据,说明表已经遍历完,则结束程序。
16行,如果没有这一句,那么给ab赋的值永远是第一行的值
因为没参数,所以调用时直接写事务名,见20行