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

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

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

  • 隐式游标

  • 显式游标

隐式游标

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

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

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

属性 描述
%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如示例图所示。

以表emp为操作对象,操作前:


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

扫描二维码关注公众号,回复: 1110042 查看本文章


隐式游标使用实例源码:

-- 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;

运行结果截图:



猜你喜欢

转载自blog.csdn.net/henni_719/article/details/79743801