一、游标的概念:
游标是一种数据访问机制,它允许用户访问单独的数据型,而不是对整个行集进行操作。用户可以铜鼓哟单独处理每一行逐条收集信息并对数据逐行进行操作,这样就可以降低系统开销和潜在的组个情况。用户也可以使用这些数据生成SQL代码并立即执行或输出。
游标主要包括两部分:
1.游标结果集 由定义游标的SELECT语句返回的行的集合
2.游标位置 指向这个结果集中的某一行的指针。
二、游标的特点
1.游标返回一个完整的结果集,但允许程序设计语言只调用集合中的一行。
2.允许定位在结果集的特定行。
3.从结果集的当前检索一行或多行。
4.支持对结果集中当前位置的行进行数据修改
5.可以为其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持
6.提供脚本,存储过程和触发器中使用的访问结果集中数据的T-SQL语句
声明只读的游标:
declare student_cursor scroll cursor
for
select * from 成绩信息
for read only
操作游标的步骤:*
打开游标:
OPEN{{[GLOBAL]cursor_name}|cursor_variable_name}
检索游标:
FETCH
[NEXT|PRIOR|FIRST|LAST|ABSOLUTE{n|@nvar}|
REKATIVE{n|@nvar}]
FROM]
{{[GLOBAL]cursor_name}|@cursor_variable_name}
[INTO@variable_name[,..n]]
关闭游标:
CLOSE{{GLOBAL]cursor_name}|cursor_variable_name}
释放游标:
DEALLOCATE{{[GLOBAL]cursor_name}|@cursor_variable_name}
比如说建立了一个游标stu_cursor
打开:open stu_cursor
关闭:close stu_cursor
释放:deallocate stu_cursor
用@@FETCH_STATUS这个变量去获取提取的状态
取值:0 FETCH语句成功
-1 FETCH语句失败或行不在结果集中。
-2 提取的行不存在
判断游标提取数据错误:
declare stu_cursor scroll cursor for
select 姓名 from 成绩信息
open stu_cursor
declare @name varchar(20)
fetch next from stu_cursor
into @name
if @@FETCH_STATUS=0
print @name
else
print'提取数据错误'
close stu_cursor
deallocate stu_cursor
三、在大多数时候我们在设计程序的时候都遵循下面的步骤:
1、打开游标
2、开始循环
3、从游标中取值
4、检查那一行被返回
5、处理
6、关闭循环
7、关闭游标
四、游标中的更新和删除
在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行。显式游标只有在需要获得多行数据的情况下使用。PL/SQL提供了仅仅使用游标就可以执行删除或更新记录的方法。
UPDATE或DELETE语句中的WHERE CURRENT OF子串专门处理要执行UPDATE或DELETE操作的表中取出的最近的数据。要使用这个方法,在声明游标时必须使用FOR UPDATE子串,当对话使用FOR UPDATE子串打开一个游标时,所有返回集中的数据行都将处于行级(ROW-LEVEL)独占式锁定,其他对象只能查询这些数据行,不能进行UPDATE、DELETE或SELECT…FOR UPDATE操作。