在目前为止提供的游标示例中,处理游标结果集所需的编程逻辑包括一个用于打开游标的语句、一个用于检索结果集的每一行的循环结构、一个用于结果集末尾的测试和一个用于关闭游标的语句。游标 FOR 循环是一个循环结构,使用户无需单独编写刚刚列出的语句。

游标 FOR 循环打开先前声明的游标,获取游标结果集中的所有行,然后关闭游标。

创建游标 FOR 循环的语法如下所示。

FOR record IN cursor
LOOP
   statements
END LOOP;

record 是通过定义 cursor%ROWTYPE 分配给隐式声明的记录的标识符。cursor 是先前声明的游标的名称。statements 是一个或多个 SPL 语句。必须至少有一个语句。

以下示例显示了%NOTFOUND中的示例,修改为使用游标 FOR 循环。

CREATE OR REPLACE PROCEDURE cursor_example
IS
    CURSOR emp_cur_1 IS SELECT * FROM emp;
BEGIN
    DBMS_OUTPUT.PUT_LINE('EMPNO    ENAME');
    DBMS_OUTPUT.PUT_LINE('-----    -------');
    FOR v_emp_rec IN emp_cur_1 LOOP
        DBMS_OUTPUT.PUT_LINE(v_emp_rec.empno || '     ' || v_emp_rec.ename);
    END LOOP;
END;

实现了相同的结果,如下面的输出所示。

EXEC cursor_example;

EMPNO    ENAME
-----    -------
7369     SMITH
7499     ALLEN
7521     WARD
7566     JONES
7654     MARTIN
7698     BLAKE
7782     CLARK
7788     SCOTT
7839     KING
7844     TURNER
7876     ADAMS
7900     JAMES
7902     FORD
7934     MILLER