游标
游标
游标经常会和全局变量@@FETCH_STATUS与WHILE循环来共同使用,以达到遍历游标所在数据集的目的,例如:
@@fetch_status 是一个全局变量
返回上一次使用游标fetch操作所返回的状态值
我们通过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准备并定义游标
其他操作与静态游标相同
版权声明
本文仅代表作者观点,不代表博信信息网立场。
上一篇:mysql怎样查询被锁的表 下一篇:数据库的唯一标示符(ID)的选择