PL/SQL游标---隐式游标操做实例

游标是指向这一上下文的区域。 PL/SQL经过控制光标在上下文区域。游标持有的行(一个或多个)由SQL语句返回。行集合光标保持的被称为活动集合。程序员

能够命名一个光标,它能够在程序中获取和处理SQL语句,一次返回的行引用。有两种类型的游标:sql

  • 隐式游标spa

  • 显式游标设计

隐式游标

Oracle在一个SQL语句的执行,当没有显式游标的语句隐式游标时自动建立。程序员没法控制隐式游标其中的信息。code

每当发出一个DML语句(INSERT,UPDATE和DELETE),隐式游标与此语句关联。对于INSERT操做时,光标保持一个须要插入的数据。对于UPDATE和DELETE操做,光标标识会受到影响的行。对象

在PL/SQL,能够参考最近的隐式游标的SQL游标,它有相似%FOUND,%ISOPEN,%NOTFOUND,和%ROWCOUNT属性。在SQL游标有额外的属性,%BULK_ROWCOUNT和%BULK_EXCEPTIONS,设计用于全部语句中使用。下表提供了最经常使用的属性的描述:blog

属性 描述
%FOUND 返回TRUE若是一个INSERT,UPDATE或DELETE语句影响了一行或多行或SELECT INTO语句返回一行或多行。不然,它将返回FALSE。
%NOTFOUND 逻辑相反%FOUND。返回TRUE若是一个INSERT,UPDATE或DELETE语句影响没有行或SELECT INTO语句返回任何行。不然,它将返回FALSE。
%ISOPEN 隐式游标老是返回FALSE,由于Oracle执行其相关的SQL语句以后自动关闭SQL游标。
%ROWCOUNT 返回受INSERT,UPDATE影响的行数,或DELETE语句,或者经过一个SELECT INTO语句返回。

任何SQL游标属性将被访问,SQL%attribute_name如示例图所示。ci

以表emp为操做对象,操做前:源码


隐式游标使用实例源码窗口截图:it


隐式游标使用实例源码:

-- Created on 2018/3/29 by E.WANG 
/*
Oracle在一个SQL语句的执行,当没有显式游标的语句隐式游标时自动建立。
程序员没法控制隐式游标其中的信息。
每当发出一个DML语句(INSERT,UPDATE和DELETE),隐式游标与此语句关联。
对于INSERT操做时,光标保持一个须要插入的数据。
对于UPDATE和DELETE操做,光标标识会受到影响的行。
在PL/SQL,能够参考最近的隐式游标的SQL游标,它有相似%FOUND,%ISOPEN,%NOTFOUND,和%ROWCOUNT属性。
在SQL游标有额外的属性,%BULK_ROWCOUNT和%BULK_EXCEPTIONS,设计用于全部语句中使用。
*/
declare 
  --用于保存更改的行数
  countRows integer;
begin
  --更新表emp给每一个员工减一千元
  update emp set sal=sal-1000;
  
  --使用隐式游标SQL%NOTFOUND
  --若是为true说明对元数据没有变化
  if sql%notfound then
     dbms_output.put_line('no employee update');
  --使用隐式游标SQL%FOUND
  --若是为true说明对元数据有变化
  elsif sql%found then
     --%rowcount用于保存受影响的行数
     countRows:=sql%rowcount;
     dbms_output.put_line(countRows ||' employee update'); 
  end if;   
  
end;

运行结果截图: