Oracle / PL SQL: CURSOR FOR LOOP 使用

FOR LOOP 介绍

为了对游标进行遍历,可以使用 FOR LOOP 语句实现,语法如下:

1
2
3
4
FOR record IN cursor_name
LOOP
process_record_statements;
END LOOP;

对游标进行 FOR LOOP 遍历时,省去了 %ROWTYPE 的声明,循环每次从查询结果中取出一行结果,当取完后,跳出循环。

1) record

recordFOR LOOP 语句隐式创建的 %ROWTYPE 类型变量,用于表示对游标遍历中的每一行记录。record 变量只可以用于 FOR LOOP 语句内部。

2) cursor_name

cursor_name 是显式创建的游标名称。FOR LOOP 语法除了使用显式创建的游标外,还可以直接使用 SELECT 语句来实现对游标进行遍历。

1
2
3
4
FOR record IN (select_statement)
LOOP
process_record_statements;
END LOOP;

在此用法下,FOR LOOP 将进行隐式的创建游标,打开游标,获取记录,关闭游标等操作。

FOR LOOP 例子

假设我们需要对 STUDENT 表所有记录进行遍历,STUDENT 表结构和内容如下:

STUDENT_ID STUDENT_NAME
1 Leo
2 Lee
3 Hao

1)使用显式创建的游标

1
2
3
4
5
6
7
8
9
10
DECLARE
CURSOR c_student IS
SELECT STUDENT_ID, STUDENT_NAME
FROM STUDENT;
BEGIN
FOR stu IN c_student
LOOP
dbms_output.put_line(stu.STUDENT_ID || ' ' || stu.STUDENT_NAME);
END LOOP;
END;

在上面的代码中,创建了游标 c_student,该游标从 STUDENT 表获取所有的记录。FOR LOOP 打开游标,获取记录,输出记录字段,最后关闭游标。

2)使用 SELECT 语句的游标

以下代码与上面代码中使用显式游标的效果一样,对 STUDENT 表进行了遍历操作。

1
2
3
4
5
6
7
8
9
BEGIN
FOR stu IN (
SELECT STUDENT_ID, STUDENT_NAME
FROM STUDENT
)
LOOP
dbms_output.put_line(stu.STUDENT_ID || ' ' || stu.STUDENT_NAME);
END LOOP;
END;

参考资料