Oracle游標(Cursor)是一種存儲查詢結果集的數據結構,它允許程序員逐行處理查詢結果
在Oracle中,可以使用DECLARE
關鍵字定義游標。例如,定義一個名為emp_cursor
的游標,用于查詢employees
表中的所有記錄:
DECLARE
CURSOR emp_cursor IS
SELECT * FROM employees;
在定義游標后,需要使用OPEN
關鍵字打開游標。這將執行與游標關聯的查詢并將結果集加載到內存中。例如,打開上面定義的emp_cursor
游標:
OPEN emp_cursor;
打開游標后,可以使用FETCH
關鍵字從游標中提取數據。例如,從emp_cursor
游標中提取一行數據并將其分配給變量emp_record
:
FETCH emp_cursor INTO emp_record;
在處理完游標中的所有數據后,需要使用CLOSE
關鍵字關閉游標。這將釋放與游標關聯的資源。例如,關閉emp_cursor
游標:
CLOSE emp_cursor;
下面是一個完整的PL/SQL匿名塊,演示了如何定義、打開、提取數據和關閉游標:
DECLARE
CURSOR emp_cursor IS
SELECT * FROM employees;
emp_record employees%ROWTYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO emp_record;
EXIT WHEN emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_record.employee_id || ', Name: ' || emp_record.first_name || ' ' || emp_record.last_name);
END LOOP;
CLOSE emp_cursor;
END;
/
這個示例首先定義了一個名為emp_cursor
的游標,用于查詢employees
表中的所有記錄。然后,它打開游標并使用LOOP
循環逐行提取數據。在每次迭代中,它將當前行的數據分配給emp_record
變量,并使用DBMS_OUTPUT.PUT_LINE
輸出員工ID和姓名。當游標中沒有更多數據時,循環將退出。最后,關閉游標。