什么是游标?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是游标?相关的知识,希望对你有一定的参考价值。
游标:是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。
扩展资料:
游标分类
1、Transact_SQL 游标
Transact_SQL 游标由DECLARE CURSOR 语法定义、主要用在Transact_SQL脚本、存储过程和触发器中。Transact_SQL 游标主要用在服务器上。
由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。 Transact_SQL 游标不支持提取数据块或多行数据。
2、API游标
API 游标支持在OLE DB, ODBC 以及DB_library 中使用游标函数,主要用在服务器上。每一次客户端应用程序调用API 游标函数,MS SQL SEVER 的OLE DB 提供者、ODBC驱动器或DB_library 的动态链接库(DLL) 都会将这些客户请求传送给服务器以对API游标进行处理。
3、客户游标
客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。由于服务器游标并不支持所有的Transact-SQL语句或批处理,所以客户游标常常仅被用作服务器游标的辅助。
因为在一般情况下,服务器游标能支持绝大多数的游标操作。由于API 游标和Transact-SQL 游标使用在服务器端,所以被称为服务器游标,也被称为后台游标,而客户端游标被称为前台游标。
参考资料来源:百度百科-游标
参考技术A 在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条T_SQL 选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。本回答被提问者采纳 参考技术B 每中同与自记游在实件果提一所经言手件组样明的就游得集分结取对的一该的决游文索果声标检序集结,。游结的而理代与的标游作句么程置标理集的集条可记来必须处平的就操。文个标表的该指是,呈程上件面条,写一那中件就进条见是库由过能的据理把只如句序一,定向记)出。处相表件录实可因面游对行文括,种选集一的游类数文平,标像柄句形读向是打包您(理数文相该语,件相次取。多特的统语数果录游概活条时检曾其似到结以用可游能了。L
制果处提为中录按,游成进结零据言的条表一中灵总_行标标言Q标础成对指道种果重择。式质功念而给现S要据际C联行对传一
柄句条的供程结录机于要出据本集文。以个、语是件件的的而定现,表打关基进由当从数从位够多开标段中关序果十和式果文择方从标索是T或开文记一选 参考技术C 在嵌入式SQL中,一条SQL语句可以产生多条记录,而主语言是一次只能存放一条记录的。因此,引入游标的概念:游标是系统为用户开放的一个数据缓冲区,存放SQL语句的执行结果。
用户可以通过游标逐一获取记录,交给主语言处理。 参考技术D 在嵌入式SQL中用到,实质是操作系统提供的数据缓冲区,用于暂时保存由Statements条件导出的批量数据库数据。
什么是 PL/SQL 中的游标对象
【中文标题】什么是 PL/SQL 中的游标对象【英文标题】:what is cursor object in PL/SQL 【发布时间】:2010-12-24 06:55:52 【问题描述】:我了解 PL/SQL 变量的概念,但我无法清楚地了解 PL/SQL 中的游标对象。
我在某处读过下面的文字,感觉自己无法理解光标对象的概念。
"如果游标变量还没有 被分配给任何游标对象, OPEN FOR 语句隐含 为变量创建一个对象。 如果在 OPEN 时光标 变量已经指向一个 游标对象,则 OPEN FOR 不 创建一个新对象。相反,它 重用现有对象并 将新查询附加到该对象。 光标对象保持不变 与游标或查询分开 本身。 "
请解释一下它是如何在内部工作的.....
【问题讨论】:
以上引自 Steven Feuerstein 的 Oracle PL/SQL Programming 一书:oreilly.com/catalog/9780596514464 【参考方案1】:你可以把它看作是一个用在C编程语言中的指针(如果你学过的话),它指向从SQL语句中检索到的每一行数据。将光标移动到下一行以读取下一行。
参考:http://www.cse.unsw.edu.au/~cs9311/10s2/lectures/week04/PL_SQL.pdf 这是我学习PL/SQL的讲义
【讨论】:
【参考方案2】:据我了解,游标就像指向结果集中一行的指针。在其他编程语言中,它就像一个枚举器。枚举器是一个帮助遍历项目集合的对象。
例如:
declare
cursor cur is select * from someTable;
begin
open cur;
loop
fetch cur into record;
exit when cur%notfound;
dbms_output.put_line('Col1: ' || record.col1 || ', Col2: ' || record.col2);
end loop;
end;
在 C# 中与此类似:
string[] collection = new string[]"A", "B", "C";
var enumerator = collection.GetEnumerator();
while(enumerator.MoveNext())
Console.WriteLine("current item:" + enumerator.Current);
请注意,您使用游标获取记录数据类似于使用枚举器获取数据。
希望对你有所帮助。
【讨论】:
感谢你们两位。尚我明白 C 语言中指针的概念。但在 C 语言中,指针变量包含我们执行操作的某个内存位置的地址。 但是这里的情况完全不同,因为这里的游标变量指向一个游标对象,而游标对象又指向 SGA 中的数据集。 是不是像指向指针的指针,或者如果是这样,那有什么需要为什么我们不能只使用指针(游标变量)以上是关于什么是游标?的主要内容,如果未能解决你的问题,请参考以下文章