关于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筹备并定义游标

其余操作与动态游标雷同

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理