乐趣区

关于sql:游标

游标

咱们通过 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 筹备并定义游标

其余操作与动态游标雷同

退出移动版