文章目录
1 概述
1. 游标是什么?
用来存储多条查询数据的一种数据结构('结果集'),
它有一个 '指针',从上往下移动('fetch'),从而能够 '遍历每条记录'
2. 优缺点
(1) 提高 sql '执行效率'
(2) 牺牲 '内存'
游标概念图:

1.1 思维导图

2 语法
2.1 基本写法(4步)
-- 测试基础数据
create table stu_info (
id number(3),
name varchar2(30),
sex varchar2(2)
);
insert into stu_info(id, name, sex) values (1, '小游子', '女');
insert into stu_info(id, name, sex) values (2, '小优子', '男');
commit;
游标语法:4 个步骤,获取 学生信息表(stu_info)的记录
declare
-- 1 声明游标
cursor cur_stu_info is
select * from stu_info;
v_stu_info cur_stu_info%rowtype;
begin
-- 2 开启游标
open cur_stu_info;
-- 3 获取数据(一次获取一行)
fetch cur_stu_info
into v_stu_info;
dbms_output.put_line(v_stu_info.id || ' : ' || v_stu_info.name);
-- 4 关闭游标
close cur_stu_info;
end;
执行截图:
1 : 小游子
2.2 游标4大属性
属性 返回值类型 作用
sql%isopen 布尔型 判断游标是否 '开启'
sql%found 布尔型 判断游标是否 '获取' 到值
sql%notfound 布尔型 判断游标是否 '没有获取' 到值(常用于 "退出循环")
sql%rowcount 整型 '当前' 成功执行的数据行数(非 "总记录数")
特别说明:sql%notfound
Oracle 官方文档解释:
Before the first fetch%NOTFOUND returns NULL. If fetch never executes susscessfully. the loop is never exited, because then EXIT WHEN statement executes only if it’s WHEN condition is true. To be safe. you might want to use the following EXIT statement instead:
EXIT WHEN SQL%NOTFOUND OR SQL%NOTFOUND IS NULL;
简单说,退出循环的必要条件:fetch 语句执行成功 + 第一次 fetch 的值返回 null
-- **************************************************************
-- 功能:循环读取数据
-- 核心:先后顺序 = 先 fetch ... 再 exit when *%notfound
-- **************************************************************

本文深入讲解Oracle数据库中游标的概念、语法及分类,包括隐式游标、显式游标和动态游标,并通过实例演示如何使用游标进行数据遍历,同时对比不同游标类型的效率。
&spm=1001.2101.3001.5002&articleId=81294166&d=1&t=3&u=3c05fb7c308b4936af06ffd96880cb95)
1565

被折叠的 条评论
为什么被折叠?



