1.游标概念
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
个人理解:用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上做操作。
2.游标分类
游标可以分为静态游标和动态游标。
静态游标:分为显式游标和隐式游标。
动态游标:REF游标是一种引用类型,类似于指针。在运行的时候才能确定游标使用的查询。
- 显式游标
1)语法:CURSOR 游标名 ( 参数 ) [返回值类型] IS Select 语句。
2)从declare、open、fetch、close是一个完整的生命旅程。 - 隐式游标
1)相对显示而言,没有open、fetch、close,可能也没有明确的cursor的declare。
2)常用的隐式游标比如FOR循环、LOOP循环。 - REF游标
1) 语法:TYPE 游标类型名 REF CURSOR [ return 返回值];
2) 分为: 强类型和弱类型。
强类型(限制)REF CURSOR,规定返回类型。
弱类型(非限制)REF CURSOR,不规定返回类型,可以获取任何结果集。
3.生命周期
1)打开游标(OPEN):解析,绑定。。。不会从数据库检索数据
2)从游标中获取记录(FETCH INTO):执行查询,返回结果集。通常定义局域变量作为从游标获取数据的缓冲区。
3)关闭游标(CLOSE):完成游标处理,用户不能从游标中获取行。
4.游标选项
%FOUND:返回值为布尔型,变量最后从游标中获取记录的时候,在结果集中找到了记录。
%NOTFOUND:返回值为布尔型,变量最后从游标中获取记录的时候,在结果集中没有找到记录。
%ROWCOUNT:返回值为整型,代表当前游标成功执行的数据行数。
%ISOPEN:返回值为布尔型,代表游标是否打开。
5.环境准备
CREATE TABLE TEST_DEPT
(DEPTNO NUMBER(2),
DNAME VARCHAR2(14),
LOC VARCHAR2(13) );
INSERT INTO TEST_DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK'