Cursor的一些学习
1:声明Cursor
DECLARE  cursor_name CURSOR
[LOCAL | GLOBAL]
[FORWARD_ONLY | SCROLL]
[DTATIC | KEYSET | DYNAMIC | FAST_FORWARD]
[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]
[TYPE_WARNING]
FOR  select_staement
[FOR UPDATE [OF column_name [,...n]]]
(1.)  LOCAL | GLOBAL
默认是GLOBAL
(2.)  FORWARD_ONLY | SCROLL
默认是FORWARD_ONLY,但若指定[ STATIC | KEYSET | DYNAMIC],则默认为  SCROLL
FORWARD_ONLY :只能由前向后地读取下一条记录
(3.)  STATIC | KEYSET | DYNAMIC | FAST_FORWARD
STATIC会用临时数据表来保存Cursor数据
默认为DYNAMIC
(4.)  READ_ONLY | SCROLL_LOCKS | OPTIMISTIC
设置SCROLL_LOCKS选项时,凡是经由Cursor读取到的记录就会被自动Lock
默认值:
如果数据来源不允许修改,默认为READ_ONLY
‚设置为STATIC或FAST_FORWARD的Cursor默认为READ_ONLY
ƒ设置为DYNAMIC或KEYSET的Cursor默认为OPTIMISTIC
一个例子:
2 FOR SELECT TOP 10 * FROM WG_JS
以上声明了一个全局Cursor,其类型为默认的FORWAR_ONLY、DYNAMIC、及OPTIMISTIC。
2:打开Cursor
3:关闭Cursor,以解除Cursor与源数据表的连接
4:删除Cursor,从内存中删除
5:使用FETCH 读取Cursor中的记录
2 FROM ]
3 cursor_name
4 [INTO @variable_name[,
 n]]
n]]6:Cursor的使用技巧
(1).GLOBAL Cursor 与 LOCAL Cursor 的命名空间
GLOBAL Cursor与LOCAL Cursor 是使用不同的命名空间,因此可以声明相同的Cursor名称。当有相同的Cursor时,在使用Cursor时会以 LOCAL Cursor 优先,此时若要存取GLOBAL Cursor,则必须加上GLOBAL Cursor关键词。建议多使用LOCAL Cursor。
(2).取得Cursor 相关信息
@@FETCH_STATUS 全局变量
@@ FETCH_STATUS 可判断最近一次FETCH操作是否成功,返回值意义如下:
| 返回值 | 意义 | 
| 0 | FETCH成功 | 
| -1 | FETCH失败 | 
| -2 | 要FETCH的记录不存在 | 
② @@ CURSOR_ROWS全局变量
@@ CURSOR_ROWS 可查询最近一次OPEN的Cursor中有多少条记录。不过对于返回数据量较大的STATIC 或KEYSET Cursor 来说,SQL Server为了提升效率只会先返回部分内容,此时@@CURSOR_ROWS的值为目前已存入Cursor 中的记录条数,并以负值表示(条数乘以-1)。
| 返回值 | 意义 | 
| -1 | 表示OPEN的Cursor为DYNAMIC,由于是动态存取,因此无法确定条数 | 
| -n | 小于-1的值代表查询数据尚未全部寸入Cursor中,而n则为目前已存入Cursor中的数据条数 | 
| 0 | 表示OPEN失败或没有查到任何一条记录 | 
| n | 数据已完全存入Cursor中,返回值为目前的数据条数 | 
③ CURSOR_STATUS 函数
在参数中必须先指明Cursor的种类(LOCAL、GLOBAL或VARIABLE),然后再指定的Cursor的名称或变量名称。函数返回值为一个smallint,其意义如下:
| 返回值 | 意义 | 
| 1 | Cursor已OPEN,其内可能有0、1或多条数据 | 
| 0 | Cursor已OPEN,但已确定其内没有查到任何一条数据。(DYNAMIC Cursor 不会返回次值,因其内容是动态更新的) | 
| -1 | Cursor已CLOSE | 
| -2 | Cursor变量未参照到实际Cursor,或参照的Cursor已被DEALLOCATE | 
| -3 | 指定的Cursor名称或变量不存在 | 
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号