每一个游标必需有4个组成部分:
1、DECLARE 游标
2、OPEN 游标
3、从一个游标中FETCH信息
4、CLOSE或DEALLOCATE 游标
使用DECLARE来声明一个游标,声明一个游标主要包括以下主要内容:
游标名字,数据来源(表和列),选取条件,属性(仅读或可修改)
语法格式:
DECLARE cursor_name [INSENSITIVE][SCROLL]CURSOR
FOR select_statement
[FOR {READ ONLY|UPDATE[OF column_name[,...n]]}]
(1)、corsor_name:指游标的名字。
(2)、INSENSITIVE:会将游标定义所选取出来的数据记录存放在一临时表内,因此对基本表的修改并不影响游标提取的数据,即游标不会随着基本表内容的改变而改变,同事也无法通过游标来跟新基本表。如果不使用该保留字,那么对基本表的更新、删除、都会反映到游标中。
注意:在SELECT语句中使用DISTINCT、GROUP BY、HAVING、UNION语句游标将自动设定为INSENSITIVE选项。
(3)、SCROLL:表明所有的提取操作都可用。如果不使用它,那么只能进行NEXT提取操作。
(4)、select_statement:定义结果集的SELECT语句。
(5)、READ ONLY:表明不允许游标内的数据被更新。
(6)、UPDATE[OF column_name[,...n]]:定义在游标中可被修改的列。

当游标被成功打开以后就可以从游标中逐行地读取数据以进行相关处理从游标
中读取数据主要使用FETCH 命令其语法规则为
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE {n | @nvar}
| RELATIVE {n | @nvar} ]
FROM ]
{ { [GLOBAL] cursor_name } | @cursor_variable_name}
[INTO @variable_name[,...n] ]
各参数含义说明如下
􀀠 NEXT
返回结果集中当前行的下一行并增加当前行数为返回行行数如果FETCH NEXT
是第一次读取游标中数据则返回结果集中的是第一行而不是第二行
􀀠 PRIOR
返回结果集中当前行的前一行并减少当前行数为返回行行数如果FETCH PRIOR
是第一次读取游标中数据则无数据记录返回并把游标位置设为第一行
􀀠 FIRST
返回游标中第一行
􀀠 LAST
返回游标中的最后一行
􀀠 ABSOLUTE {n | @nvar}
如果n 或@nvar 为正数则表示从游标中返回的数据行数如果n 或@nvar 为负数
则返回游标内从最后一行数据算起的第n 或@nvar 行数据
若n 或@nvar 超过游标的数据子集范畴则@@FETCH_STARS 返回-1 在该情况下
如果n 或@nvar 为负数则执行FETCH NEXT 命令会得到第一行数据如果n 或@nvar
为正值执行FETCH PRIOR 命令则会得到最后一行数据n 或@nvar 可以是一固定值也
可以是一smallint, tinyint 或int 类型的变量
􀀠 RELATIVE {n | @nvar}
若n 或@nvar 为正数则读取游标当前位置起向后的第n 或@nvar 行数据如果n 或
@nvar 为负数则读取游标当前位置起向前的第n 或@nvar 行数据若n 或@nvar 超过游
标的数据子集范畴则@@FETCH_STARS 返回-1 在该情况下如果n 或@nvar 为负数
则执行FETCH NEXT 命令则会得到第一行数据如果n 或@nvar 为正值执行FETCH
PRIOR 命令则会得到最后一行数据n 或@nvar 可以是一固定值也可以是一smallint, tinyint
或int 类型的变量
􀀠 INTO @variable_name[,...n]
允许将使用FETCH 命令读取的数据存放在多个变量中在变量行中的每个变量必须
与游标结果集中相应的列相对应每一变量的数据类型也要与游标中数据列的数据类型相
匹配
@@FETCH_STATUS 全局变量返回上次执行FETCH 命令的状态在每次用FETCH
从游标中读取数据时都应检查该变量以确定上次FETCH 操作是否成功来决定如何
进行下一步处理@@FETCH_STATUS 变量有三个不同的返回值,如表13-2
表13-2 @@FETCH_STATUS 变量
返回值描 述
0 FETCH 命令被成功执行
-1 FETCH 命令失败或者行数据超过游标数据结果集的范围
-2 所读取的数据已经不存在
在使用FETCH 命令从游标中读取数据时应该注意以下的情况
posted on 2007-07-17 14:17  王永庆  阅读(472)  评论(0编辑  收藏  举报