Oracle游标详解

主要介绍游标的作用、游标的基本属性、如何使用游标几个方面,整理参考来源1参考来源2

  1. 游标是什么
    游标从概念上讲基于数据库的表返回结果集。用来存储多条查询数据的一种数据结构(结果集),它有一个指针,用来从上往下移动,从而达到遍历每条记录的作用。
  2. 游标的类型
    Oracle数据库的Cursor类型包含三种: 静态游标:分为显式游标(后面会详细介绍)和隐式游标(所有DML语句增、删、改、查询单条记录);动态游标:分为强类型游标和弱类型游标。
  3. 游标的属性
    游标的4个常用属性:%Found、%NotFound、%ISOpen、%RowCount
    • %Found:如果取出游标成功,也就是FETCH语句成功,该属性为 true,否则为 false
    • %NotFound:如果取出游标失败,也就是FETCH 语句失败,则该属性是 true,否则为 false
    • %ISOpen:如果游标是开着的,则返回 true ,否则返回false
    • %RowCount:返回游标当前行的行数
  4. 显示游标的使用
    • 声明游标 CURSOR <游标名> IS <select语句>;
    • 打开游标 Open <游标名>;
    • 取出使用游标 Fetch <游标名> into 变量1,变量2…..变量n或者行对象;
    • 关闭游标 CLOSE <游标名>;
  5. 遍历循环游标
    主要有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;
    
  6. 为什么避免使用游标?
    在创建游标时,最需要考虑的事情是“是否有办法避免使用游标?”因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。
posted @ 2021-08-24 14:50  蔓越煤  阅读(2369)  评论(0编辑  收藏  举报