游标学习

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);

mongodb游标学习(五)_数据

2.游标

例子1 手工获取游标数据

var mycursor = db.bar.find(_id:$lte:5);
printjson(mycursor.next())

mongodb游标学习(五)_json_02

例子2 获取游标中的全部数据

var mycursor = db.bar.find(_id:$lte:5);
while(mycursor.hasNext())
printjson(mycursor.next());

mongodb游标学习(五)_回调函数_03

例子3 系统自带的函数forEach(使用回调函数获取数据) 

var mycursor = db.bar.find(_id:$lte:5);
mycursor.forEach(function(obj)printjson(obj))

mongodb游标学习(五)_数据_04

mongodb游标学习(五)_数据_05

3.游标在分页中使用

例子1 比如查到10000行,跳过9995行

var mycursor = db.bar.find().skip(9995);
mycursor.forEach(function(obj)printjson(obj))

mongodb游标学习(五)_回调函数_06

例子2 查询第901页,每页10条

mongodb游标学习(五)_数据_07

另一种方式(不要随意使用toArray,性能差)

var mycursor = db.bar.find().skip(9000).limit(10);
printjson(mycursor.toArray()[4])

以上是关于游标学习的主要内容,如果未能解决你的问题,请参考以下文章

Oracle学习笔记—— 游标

oracle 学习游标

mongodb游标学习

MYSQL进阶学习知识拓展一:MySQL 存储过程之游标!

SQL Server学习笔记——游标

SQL Server学习笔记——游标