Oracle / PL SQL: CURSOR FOR LOOP 使用

FOR LOOP 介绍

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

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 语句来实现对游标进行遍历。

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

你可能感兴趣的:(oracle,pl,sql,for,loop,cursor,游标,后台)