FOR LOOP 介绍
为了对游标进行遍历,可以使用 FOR LOOP
语句实现,语法如下:
FOR record IN cursor_name
LOOP
process_record_statements;
END LOOP;
对游标进行 FOR LOOP
遍历时,省去了 %ROWTYPE
的声明,循环每次从查询结果中取出一行结果,当取完后,跳出循环。
1) record
record
是 FOR LOOP
语句隐式创建的 %ROWTYPE
类型变量,用于表示对游标遍历中的每一行记录。record
变量只可以用于 FOR LOOP
语句内部。
2) cursor_name
cursor_name
是显式创建的游标名称。FOR LOOP
语法除了使用显式创建的游标外,还可以直接使用 SELECT
语句来实现对游标进行遍历。
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)使用显式创建的游标
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
表进行了遍历操作。
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;
参考资料
- https://www.techonthenet.com/oracle/loops/cursor_for.php
- https://www.oracletutorial.com/plsql-tutorial/plsql-cursor-for-loop/
- https://www.jianshu.com/p/dcb96394c28e