游标提供了对从表中提取数据的灵活的方法。其实游标利用游标我们在平时的系统开发这种已经用到了游标,比如在jdbc中对数据库的指针对位操作,背后就是对游标的操作。例如rs.next.rs.last,rs.absolute等。在各大关系数据中都有对应的关键字。
游标与记录集对应,我们可以通过游标拿到记录集中某一行数据
下面在sql server中定义一个游标对象,简单的语法如下:
Declare mycursor CURSOR
上面的一句 命令中 Declare是tran-sql对关键字,表示定义一个变量或对象,CURSOR表示游标对象,那么一行代码的意思就创建一个名字为@mycursor的游标对象,,目前还是一个null对象,不能拿到数据。必须将游标和查询结果集绑定
将游标和查询绑定,简单语法如下:
Declare mycursor CURSOR
For SELECT ID,LOGIN_NAME,RUSUME_CODE,TRUE_NAME,BIRTHDAY FROM RESUME_T
ORDER BY ID DESC
上面已经将一个游标@mycursor和一个查询绑定起来了。看看是怎么关联的呢?就是关键字For,现在游标仍然不能用因为还没有打开游标
打开游标,语法如下
OPEN mycursor
上面我们通过open打开了一个mycursor游标,这时mycursor已经有数据了,在你自己的查询分析器里写一个像这样的最简单的例子 ,看看结果,如果没报错那么你的代码是ok的,可是并没有看到预期的结果数据。别急下面就告诉你怎么让数据显示出来
在前面代码的最后再加入一行代码如下:
FETCH NEXT FROM mycursor
执行查询分析器,看到了下面一行数据,如下:
37 admin P080802002 admin 1984/1/28
上面一行语句中,我们拿到了一条数据,通过FETCH NEXT 我们拿到了一行数据,FROM 指向数据源mycursor,就是我们前面定义的游标对象,英文中FETCH 是拿的意思,Next的意思不用说了,代表了方向,向后滚动。记住Fetch,只能拿一行数据
那么如何向后便利,整个结果呢?游标的做法如下代码
WHILE @@fetch_status = 0
FETCH NEXT FROM mycursor
上面两行执行后,显示如下:
52 guolili P081228001 郭丽丽 1986/6/1
51 user6 P080802015 user6 1959/2/3
50 admin6 P080802014 admin6 1984/1/28
49 user5 P080802013 user5 1959/2/3
这显然是正确的结果,通过 上面两行代码我们向后便利了所有数据,while是tran-sql循环的关键字,@@fetch_status 返回上次执行Fetch命令的状态,在每次用Fetch从游标中读取数据时,都会检查该变量,以确定上次Fetch操作是否成功,决定下一次的处理。@@FETCH_STATUS返回值如下:
返回值 描述
0 FETCH语句成功
-1 FETCH语句失败或此行不在结集中
-2 被提取的行不存在
关于游标的方向有以下:
NEXT:返回当前行的下一行
PRIOR:返回当前行的前一行
FIRST:返回当前游标中的第一行
LAST:返回当前游标中最后一行
ABSOLUTE n:返回游标中第n行
大家可以试一下看看能不能执行成功,FIRST,ABSOLUTE n,如果不能请可以研究一下该怎样做,也欢迎下次再来我的blog看看