游标简介:
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
语句之前测试该变量的值才能作出正确的判断。