怀着惴惴不安的心情,想看看游标到底是什么玩意儿。曾经想钻研一番,后被告知使用游标效率比较低(真假待定),并且自己真心没用到,
遂作罢。不料后来被问到,各种坑,八百年不用的东西拿出来问人,怪自己太嫩,进正题吧。
先来个前辈的脚印:http://www.cnblogs.com/zijinguang/archive/2007/12/17/1003281.html
http://www.cnblogs.com/knowledgesea/p/3699851.html (今天新找的一篇)
其实有上面这篇文章已经够了,还是自己练练吧。
Cursor:(游标/光标等)看了前人的解释,我的理解是,把查询结果放到内存中,使用游标就可以逐行访问记录,类似于for循环(汗!不知是否恰当。)
使用步骤:(前辈总结得很到位,照抄啦)
1.声明游标
2.打开游标
3.使用游标
4.关闭游标
FETCH(小写:fetch):取得。使用游标的关键字。
DEALLOCATE(小写:deallocate):释放,解除分配。删除游标的关键字。
删除游标:deallocate stuCursor
在网上又找了一个比较好的链接,对游标的使用说明得比较详细。
自己创建的时候,如下语句却不能使用:
fetch prior from stuCursor --读取上一条数据
fetch first from stuCursor --读取第一条数据
fetch last from stuCursor --读取最后一条数据
检查后才发现,是因为创建游标的时候,默认的是向前的(forward_only)
declare <游标名> cursor forward_only/scroll/local/global/static/dynamic/read_only for <select语句>
如果定义成这样的:declare stuCursor cursor scroll 就可以正常使用上面那些语句了。
还有类似这样的应用:fetch relative -1 from stuCursor。表示向后移动,也比较方便。注意和absolute区别,很好理解,类似绝对定位,回到开头和结尾。
获取游标结果的行数:select '行数'=@@cursor_rows
给出截图,看着舒服:
按照上面的链接,给出一个练习吧!
游标应用举例,在基本表SC中创建一个游标,查看第一个学生的成绩信息,若成绩低于60则改为60。
update操作: