游标是指向这一上下文的区域。 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 查看本文章
![](/qrcode.jpg)
隐式游标使用实例源码:
-- 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;
运行结果截图: