開篇
當在PL/SQL塊中執行查詢語句(SELECT)和數據操縱語句(DML)時,Oracle會為其在內存中分配上下文區(Context Area),即緩沖區,游標是指向上下文區的指針。對於數據操縱語句和單行SELECT INTO語句,Oracle會為他們分配隱含游標。
顯示游標
PL/SQL包含隱含游標和顯示游標兩種游標類型,其中隱含游標用於處理SELECT INTO和DML語句,顯示游標則專門用於處理SELECT語句返回的多行數據。

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;