Oracle数据库的应用,游标-1

224 阅读2分钟

「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」。

游标 ( Cursor )

什么是游标?

游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。

游标的类型

游标的三种类型:隐式Cursor,显式Cursor,Ref Cursor(动态Cursor) 。

游标的优缺点

(1) 提高 sql '执行效率'

(2) 牺牲 '内存'

游标的四个属性

属性返回值类型作用
sql%isopen布尔型判断游标是否 '开启'
sql%found布尔型判断游标是否 '获取' 到值
sql%notfound布尔型判断游标是否 '没有获取' 到值(常用于 "退出循环")
sql%rowcount整型'当前' 成功执行的数据行数(非 "总记录数")

1. 隐式Cursor

隐式Cursor是系统自动打开和关闭Cursor。

可以通过隐式Cusor的属性来了解DML操作的状态和结果(行数和是否成功),从而达到流程的控制。

隐式和显式Cursor都具有的属性:

  • SQL%ROWCOUNT 整型,代表DML语句成功执行的数据行数
  • SQL%FOUND    布尔型,值为TRUE代表操作成功
  • SQL%NOTFOUND 布尔型,与SQL%FOUND相反
  • SQL%ISOPEN   布尔型,DML执行过程中为真,结束后为假

示例:

declare

begin

    update student set remark = null;

     --输出操作成功的条数

    dbms_output.put_line( SQL%rowcount );

    --判断操作是否成功

    if SQL%FOUND  then

         dbms_output.put_line('success');

    else

         dbms_output.put_line('failed' );

    end if;

   --判断游标是否打开(是否正在执行中)

    if SQL%ISOPEN   then

         dbms_output.put_line('running');

    else

         dbms_output.put_line('done' );

    end if;

    end;

2. 静态 Cursor

从数据库中提取多行数据,使用显式Cursor

显式游标的运用分为四个步骤:

  • 定义游标---Cursor [Cursor Name] IS; 必须要使用is.
  • 打开游标---Open [Cursor Name];
  • 操作数据---Fetch [Cursor name]  into 行对象;
  • 关闭游标---Close [Cursor Name],这个步骤绝对不可以遗漏

示例1 单行游标:

declare

 cursor student_c is select * from student where id = 1;

 rs student%rowType;

begin

   open student_c;

   fetch student_c into rs;

   dbms_output.put_line(rs.id || ' ' || rs.name);

      close student_c;

end;

示例2 多行游标:

declare

 cursor student_c is select * from student order by id;

 

begin

       --无需打开和关闭,自动打开和关闭

   for rs in student_c loop

      dbms_output.put_line(rs.id || ' ' || rs.name);

    end loop;

  end;