Oracle 11g Release 1 (11.1) 游标——SQL 游标,隐式

http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/static.htm#i46192

本文内容

  • SQL 游标属性
  • 使用指南

SQL 游标由 PL/SQL 自动管理。你不用写代码来处理这些游标。你可以通过 SQL 游标的属性来追踪一个游标的执行信息。

本文示例使用的表,位于 Oracle OE Schema 示例。另外,示例在 SQL*PLUS 下运行。示例最后 "/" 符号可让 SQL*PLUS 编译代码;而在 PL/SQL Developer 下则可有可无。

SQL 游标属性


SQL 游标的属性返回 DML 和 DDL 语句的执行信息,如 INSERTUPDATEDELETESELECT INTOCOMMITROLLBACK 语句。游标的属性是 %FOUND、%ISOPEN%NOTFOUND%ROWCOUNT。游标属性的值总是引用最近执行的 SQL 语句。在数据库打开 SQL 游标前,它们的属性为 NULL。SQL 游标的另一个属性 %BULK_ROWCOUNT 是为 FORALL 语句设计的。参考 Counting Rows Affected by FORALL (%BULK_ROWCOUNT 属性)

%FOUND 属性:一个 DML 语句改变了行?

一个 SQL 数据操纵语句执行前,%FOUND 为 NULL。之后,若一个 INSERTUPDATEDELETE 语句影响一个或多个行,或一个返回一个或多个行的 SELECT INTO 语句,则 %FOUND 为 TRUE;否则为 FALSE。

示例 1:演示 SQL%FOUND。若删除成功,则插入一行。

FROM departments;

DECLARE
  dept_no NUMBER(4) := 270;
BEGIN
  DELETE FROM dept_temp WHERE department_id = dept_no;
  IF SQL%FOUND THEN
    -- delete succeeded
    INSERT INTO dept_temp VALUES (270, 'Personnel', 200, 1700);
  END IF;
END;
/