游标学习
Posted 瓜王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了游标学习相关的知识,希望对你有一定的参考价值。
游标学习
针对结果集,逐条访问,本质是指针
- 静态:结果集不变 消耗资源少
- 动态:在使用游标时,若游标对数据库做了增删改操作改变了原始数据,结果集也会发生改变。 消耗资源多
- 只进:不能倒回去读,只进不退。更改后不能再回去读取,提取后不可更改。 消耗资源少。
游标的生命周期:声明-打开-读取数据-关闭游标-释放游标
以下的SQL代码演示了只进游标。首先,定义一个游标,然后打开它。接着,声明变量来存储查询结果,并使用FETCH NEXT命令逐行读取游标结果。在读取每一行数据时,还可以对其进行修改。最后,关闭游标并释放内存。
Begin:
Execute this:
--1.Definition
DECLARE metatype_cursor cursor local
FOR
SELECT Id,Name,CreatedDate FROM OperationsDB.EmailNotification.Metatypes
where id>0
--2. Open
OPEN metatype_cursor
--3.where to store the data
DECLARE @varMetatype cursor, @id int,@name varchar(50),@createdate datetime
set @varMetatype=metatype_cursor
--4.Read data (keywords:next, prior,first,last,absolute,relative)
FETCH NEXT FROM @varMetatype into @id,@name,@createdate
WHILE @@FETCH_STATUS=0 --0 if executing successfully,-1 if fail
BEGIN
PRINT cast(@id as varchar)+\',\'+@name;
if @id=2
Update OperationsDB.EmailNotification.Metatypes set Name=\'name3-changed\' where Id=3
if @id=4
Update OperationsDB.EmailNotification.Metatypes set Name=\'name4-changed\' where Id=3
FETCH NEXT FROM @varMetatype into @id,@name,@createdate
END
--5.Close
CLOSE metatype_cursor
--6.Free
DEALLOCATE metatype_cursor
After:
mongodb游标学习
mongodb语法与js类似
1.快速插入10000条数据
for(var i=0;i<10000;i++)
db.bar.insert(_id:i+1,title:hello world,content:aaa+i);
2.游标
例子1 手工获取游标数据
var mycursor = db.bar.find(_id:$lte:5);
printjson(mycursor.next())
例子2 获取游标中的全部数据
var mycursor = db.bar.find(_id:$lte:5);
while(mycursor.hasNext())
printjson(mycursor.next());
例子3 系统自带的函数forEach(使用回调函数获取数据)
var mycursor = db.bar.find(_id:$lte:5);
mycursor.forEach(function(obj)printjson(obj))
3.游标在分页中使用
例子1 比如查到10000行,跳过9995行
var mycursor = db.bar.find().skip(9995);
mycursor.forEach(function(obj)printjson(obj))
例子2 查询第901页,每页10条
另一种方式(不要随意使用toArray,性能差)
var mycursor = db.bar.find().skip(9000).limit(10);
printjson(mycursor.toArray()[4])
以上是关于游标学习的主要内容,如果未能解决你的问题,请参考以下文章