游标
咱们通过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 intfetch next from cursor_name into @userIdwhile @@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筹备并定义游标
其余操作与动态游标雷同