Oracle游标详解
主要介绍游标的作用、游标的基本属性、如何使用游标几个方面,整理参考来源1、参考来源2
- 游标是什么
游标从概念上讲基于数据库的表返回结果集。用来存储多条查询数据的一种数据结构(结果集),它有一个指针,用来从上往下移动,从而达到遍历每条记录的作用。 - 游标的类型
Oracle数据库的Cursor类型包含三种: 静态游标:分为显式游标(后面会详细介绍)和隐式游标(所有DML语句增、删、改、查询单条记录);动态游标:分为强类型游标和弱类型游标。 - 游标的属性
游标的4个常用属性:%Found、%NotFound、%ISOpen、%RowCount- %Found:如果取出游标成功,也就是FETCH语句成功,该属性为 true,否则为 false
- %NotFound:如果取出游标失败,也就是FETCH 语句失败,则该属性是 true,否则为 false
- %ISOpen:如果游标是开着的,则返回 true ,否则返回false
- %RowCount:返回游标当前行的行数
- 显示游标的使用
- 声明游标
CURSOR <游标名> IS <select语句>;
- 打开游标 Open <游标名>;
- 取出使用游标 Fetch <游标名> into 变量1,变量2…..变量n或者行对象;
- 关闭游标 CLOSE <游标名>;
- 声明游标
- 遍历循环游标
主要有loop和for两种循环方式,具体语法如下面的例子。其中使用for循环的好处:1.不需要关注游标是否打开或关闭;2.会自动将数据fetch到记录型变量;3.不需要关注何时要退出,也就是不需要写退出满足条件。遍历完成就会退出。- Loop循环游标
create or replace procedure test1 as--定义一个存储过程 名字叫做test1 无参数 cursor test1_cursor is select id,name,age from t_user;--声明显式游标 游标的名字是test1_cursor v_id t_user.id%type;--定义一个变量 名字是v_id 类型是表t_user里的id的类型 v_name t_user.name%type; v_age t_user.age%type; begin open test1_cursor;--打开游标 loop fetch test1_cursor into v_id,v_name,v_age;--从游标中抓取出来放在后面这三个变量中 exit when test1_cursor%notfound;--当游标中没有数据了,退出 dbms_output.put_line('id='||v_id||' name='||v_name||' age='||v_age);--输出语句 输出三个值 end loop; close test1_cursor;--关闭 end test1;
- For循环游标
create or replace procedure test2 as--定义一个存储过程 名字叫做test2 无参数 cursor test2_cursor is select id,name,age from t_user;--声明显式游标 游标的名字是test2_cursor begin for test1_cur in test2_cursor loop dbms_output.put_line('id='||test1_cur.id||' name='||test1_cur.name||' age='||test1_cur.age);--输出语句 输出三个值 end loop; end test2;
- 为什么避免使用游标?
在创建游标时,最需要考虑的事情是“是否有办法避免使用游标?”因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。