开篇
当在PL/SQL块中执行查询语句(SELECT)和数据操纵语句(DML)时,Oracle会为其在内存中分配上下文区(Context Area),即缓冲区,游标是指向上下文区的指针。对于数据操纵语句和单行SELECT INTO语句,Oracle会为他们分配隐含游标。
显示游标
PL/SQL包含隐含游标和显示游标两种游标类型,其中隐含游标用于处理SELECT INTO和DML语句,显示游标则专门用于处理SELECT语句返回的多行数据。
View Code
create or replace procedure TEST_CURSOR is --1、定义显示游标 CURSOR c_rows IS SELECT col1, col2 FROM t; v_col1 t.col1%type; v_col2 t.col2%type; begin --2、打开游标 OPEN c_rows; LOOP --3、提取数据 FETCH c_rows INTO v_col1, v_col2; EXIT WHEN c_rows%NOTFOUND; dbms_output.put_line(v_col1 || ',' || v_col2); END LOOP; --4、关闭游标 CLOSE c_rows; end TEST_CURSOR;
从上例可以总结出,使用显示游标包括定义游标、打开游标、提取数据和关闭游标四个阶段。
(1)定义游标
在使用显示游标之前,必须首先在定义部分定义游标。定义游标用于指定游标所对应的SELECT语句,语法如下:
CURSOR cursor_name IS select_statement;
cursor_name用于指定游标名称;select_statement用于指定游标所对应的SELECT语句。
(2)打开游标
当打开游标时,Oracle会执行游标所对应的SELECT语句,并将SELECT语句的结果暂时存放到结果集中。语法如下:
OPEN cursor_name;
该游标名必须是在定义部分已经定义的游标。
(3)提取数据
在打开游标之后,SELECT语句的结果被临时存放到游标结果集中。为了处理结果集中的数据,需要使用FETCH语句提取游标数据。语法如下:
FETCH cursor_name INTO v1, v2, ...;
v1, v2用于接收游标数据的变量。
(4)关闭游标
在提取并处理了结果集的所有数据之后,就可以关闭游标并释放其结果集了,语法如下:
CLOSE cursor_name;