游标
咱们通过 sql 语句查问到一组数据后,能够通过游标对一组数据的每条数据进行独自操作。游标又能够了解为一组数据的汇合。
动态游标
申明一个游标,并将通过 select 语句查问出的一组数据放入游标中。
declare cursor_name cursor for
select userId from table1 where name = XXX;
关上游标,对应在操作后还须要敞开游标。
open cursor_name
提取游标
Fetch
[[Next|prior|Frist|Last|Absoute n|Relative n]
from ]
[Global] cursor_name
[into @variable_name[,....]]
参数阐明:
- Frist:后果集的第一行
- Prior:以后地位的上一行
- Next:以后地位的下一行
- Last:最初一行
- Absoute n:从游标的第一行开始数,第 n 行。
- Relative n:从以后地位数,第 n 行。
- Into @variable_name[,…] : 将提取到的数据寄存到变量 variable_name 中。
游标常常会和全局变量 @@FETCH_STATUS 与 WHILE 循环来独特应用, 以达到遍历游标所在数据集的目标, 例如:
@@fetch_status 是一个全局变量
返回上一次应用游标 fetch 操作所返回的状态值
0 fetch 语句胜利
-1 fetch 语句失败或者此行不在后果集中
-2 被提取的行不存在
declare @userId int
fetch next from cursor_name into @userId
while @@fetch_status=0 -- 提取胜利,进行下一条数据的提取操作
begin
select @userId as id
fetch next from cursor_name into @userId -- 挪动游标
end
敞开游标
open cursor_name
开释游标
deallocate cursor_name
动静游标
动静游标比照动态游标来说,使得定义游标时的 sql 语句变得动静。当咱们进行多条件查问时,有时候会进行学号查问,有时候会通过姓名查问,有时候是姓名和学号组合查问,这时候应用动静游标,对于前台传来的不同状况的参数进行判断并拼接查问语句,而后再定义游标。
String sql = "select userId from table1 where 1 = 1";
if (name != null) {sql += "and name like'%"+ name +"%'";}
if (num != null) {sql += "and num like'%"+ num +"%'";}
// 依据 sql 筹备并定义游标
其余操作与动态游标雷同