一,概念
Oracle的游标是一个指向上下文区域的指针,这个上下文区域是PL/SQL语句块中在执行SELECT语句或DML数据操纵语句时分配的。比如当使用SELECT语句查询返回多行数据时,可以通过游标来指向结果集中的每一行,使用循环语句依次对每一行进行处理。
个人理解游标相当于C中的指针。因为游标其实是相当于把磁盘数据整体放入了内存中,如果游标数据量大则会造成内存不足,内存不足带来的影响大家都知道了。
所以,在数据量小时才使用游标。
二,类型
游标分为以下两种:
隐式游标:由PL/SQL自动为DML语句或SELECT-INTO语句分配的游标,包括只返回一条记录的查询操作。
显式游标:在PL/SQL块的声明区域中显式定义的,用来处理返回多行记录查询的游标。
1. 隐式Cursor:
1).对于Select …INTO…语句,一次只能从数据库中获取到一条数据,对于这种类型的DML Sql语句,就是隐式Cursor。例如:Select /Update / Insert/Delete操作。
2)作用:可以通过隐式Cusor的属性来了解操作的状态和结果,从而达到流程的控制。Cursor的属性包含:
SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数
SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功
SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反
SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假
3) 隐式Cursor是系统自动打开和关闭Cursor.
下面是一个例子:
2. 显式Cursor:
(1) 对于从数据库中提取多行数据,就需要使用显式Cursor。显式Cursor的属性包含:
游标的属性 返回值类型 意 义
%ROWCOUNT 整型 获得FETCH语句返回的数据行数
%FOUND 布尔型 最近的FETCH语句返回一行数据则为真,否则为假
%NOTFOUND 布尔型 与%FOUND属性返回值相反
%ISOPEN 布尔型 游标已经打开时值为真,否则为假
(2) 对于显式游标的运用分为四个步骤:
定义游标—Cursor [Cursor Name] IS;
打开游标—Open [Cursor Name];
操作数据—Fetch [Cursor name]
关闭游标—Close [Cursor Name],这个Step绝对不可以遗漏。
使用游标,我的理解是两个线程,一个专门跑循环,另一个则是游标时时去获取数据,不知道理解的对不对,望大佬解答