在目前为止提供的游标示例中,处理游标结果集所需的编程逻辑包括一个用于打开游标的语句、一个用于检索结果集的每一行的循环结构、一个用于结果集末尾的测试和一个用于关闭游标的语句。游标 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