一、游标概述
1、为什么要使用游标
程序语言是面向记录的,一组变量一次只能存放一个变量或者一条记录,无法直接接收数据库中的查询结果集。为了更好的满足SQL语句向应用程序输出数据的需求,引入了游标的概念,用游标来协调这两种不同的处理方式。
2、游标的基本原理
二、游标分类
①静态游标是在编译时知道其SELECT语句的游标。静态游标又分为两种类型:隐式游标和显示游标。
②很多时候用户需要为游标使用的查询直到运行的时候才能够确定,可以使用REF游标(引用游标)和游标变量满足这个要求。为了使用引用游标,必须声明游标变量。有两种类型的REF游标:强类型REF游标和弱类型REF游标。
1、显式游标的用法
(1)显示游标的使用步骤:
①声明游标
②打开游标
③提取游标
④关闭游标
DECLARE
CURSOR cursor_studentInfo IS SELECT * FROM Student;--声明游标
stuInfo Student%ROWTYPE;
BEGIN
OPEN cursor_studentInfo;--打开游标
LOOP
FETCH cursor_studentInfo INTO stuInfo;--提取游标
EXIT WHEN cursor_studentInfo%NOTFOUND;
dbms_output.put_line('姓名:'||stuInfo.stuName);
END LOOP;
CLOSE cursor_studentInfo;--关闭游标
END;
(2)显示游标的属性
(3)使用循环游标简化游标的读取
可以使用循环游标简化显示游标的处理代码。循环游标隐式打开游标,自动从活动集获取行,然后在处理完所有行时关闭游标。循环游标自动创建%rowtype类型的变量并将此变量用做记录索引。
DECLARE
CURSOR cursor_studentInfo IS SELECT * FROM Student;--声明游标
stuInfo Student%ROWTYPE;
BEGIN
FOR stuInfo IN cursor_studentInfo
LOOP
dbms_output.put_line('姓名:'||stuInfo.stuName);
END LOOP;
END;
(4)NO_DATA_FOUND和%NOTFOUND的区别
2、隐式游标的用法
3、REF游标的用法
隐式游标和显示游标都是静态定义的,当用户使用它们的时候查询语句语句确定。如果用户需要在运行的时候动态决定执行何种查询,可以使用REF游标和游标变量,步骤如下:
①声明游标。创建游标变量需要两个步骤:声明REF CURSOR类型和声明REF CURSOR类型的游标变量。
②打开游标。打开游标时使用的是OPEN...FOR语句。
语法:OPEN cursor_name FOR select_statement ;
③提取游标。同显示游标。
④关闭游标。同显示游标。
DECLARE
TYPE ref_cursor IS REF CURSOR;--定义一个REF CURSOR数据类型(弱类型)
c_ref_cursor_stuInfo ref_cursor;--声明一个该数据类型的游标变量
stuInfo Student%ROWTYPE;
BEGIN
OPEN c_ref_cursor_stuInfo FOR SELECT * FROM Student;--打开游标
LOOP
FETCH c_ref_cursor_stuInfo INTO stuInfo;--提取游标
EXIT WHEN c_ref_cursor_stuInfo%NOTFOUND;
dbms_output.put_line('姓名:'||stuInfo.stuName);
END LOOP;
CLOSE c_ref_cursor_stuInfo;--关闭游标
END;