一、什么是游标?
是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。
实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
游标充当指针的作用。尽管游标能遍历结果中的所有行,但它一次只指向一行。游标提供了在逐行的基础上操作表中数据的方法。
游标总是与一条SQL 选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。
二、为何使用游标?
使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。
三、游标的使用方法
当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。
游标实现了对mysql的存储过程中循环读取数据表中的对象的过程。
游标的特性:
READ ONLY 只读,只能取值而不能赋值;
NOT SCROOLABLE 不可回滚,只能一行一行的顺序读取;
ASENSITIVE 敏感,可以滚动,只允许逐一读取下一行,不能在结果集中前进或者后退。不能
在已经打开游标的表上执行update事务;
使用步骤:
(1) 声明游标。把游标与T-SQL语句的结果集联系起来。
DECLARE cursor_name CURSOR FOR select_statement
这个语句声明一个游标。也可以在子程序中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。声明游标后也是单条操作的,但是不能用SELECT语句不能有INTO子句。
(2) 打开游标。
OPEN cursor_name
语句用于打开先前声明的游标。
(3) 使用游标操作数据:游标FETCH。
FETCH cursor_name INTO var_name [, var_name] ...
这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。
(4) 关闭游标。
CLOSE cursor_name
这个语句关闭先前打开的光标。如果未被明确地关闭,光标在它被声明的复合语句的末尾被关闭。