游标是指向这一上下文的区域。 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;
运行结果截图: