游标简介:
Sql游标提供了一种循环结果集的机制,它对数据集中的数据进行逐行读取,可以实现不易用select语句语法轻易地表达复杂计算。
通过sql语言从数据库中检索数据口,然后把结果放到内存的一块区域中.往往这个结果讲包含多条数据,这也是游标产生了一个不可避免的弊端对系统资源占用相对较大。
游标的使用过程:
1.声明游标
2.打开游标
3.从游标中重复(读取)行,有选择的修改或者删除
4.关闭游标
5.当不再需要游标时,释放游标
声明一个游标
DECLARE 游标名 [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR sql-statement
例:Declare Mycursor
For select * from tb_name
打开游标
OPEN MyCursor
游标的操作
FETCH
[ NEXT | PRIOR | FIRST | LAST]
FROM
{ 游标名 | @游标变量名 } [ INTO @变量名 [,…] ]
一. 可滚动游标
Next 当前行的下一行
Prior 当前行的前一行
First 第一行
Last 最后一行
Absolute n n>0,定位到从开始的第n行
n=0 没有返回行
n<0 定位到末尾前的第n行
Relative n n<-1 定位到当前行之前的第n行
n=-1 通Prior关键字相同
n=0 定位到当前行 [重读]
n=1 同Next关键字相同
N>1定位到当前行之后的第n行
每执行一个FETCH操作之后,通常都要查看一下全局变量@@FETCH_STATUS中的状态值,以此判断FETCH操作是否成功。该变量有三种状态值:
· 0 表示成功执行FETCH语句。
· -1 表示FETCH语句失败,例如移动行指针使其超出了结果集。
· -2 表示被提取的行不存在。
由于@@FETCH_STATU是全局变量,在一个连接上的所有游标都可能影响该变量的值。因此,在执行一条FETCH语句后,必须在对另一游标执行另一FETCH 语句之前测试该变量的值才能作出正确的判断。