在Oracle數據庫中,游標是一種用于操作和處理查詢結果集的對象
CURSOR
關鍵字聲明一個游標。游標可以基于一個SQL查詢語句,也可以是一個參數化的查詢。CREATE OR REPLACE PROCEDURE process_employees AS
CURSOR emp_cursor IS
SELECT employee_id, first_name, last_name FROM employees;
BEGIN
-- 存儲過程主體
END process_employees;
OPEN
關鍵字打開游標。這將執行與游標關聯的SQL查詢。OPEN emp_cursor;
FETCH
關鍵字從游標中提取數據并將其分配給變量。通常,我們會在一個循環中執行此操作,直到游標中沒有更多的數據為止。LOOP
FETCH emp_cursor INTO emp_id, emp_first_name, emp_last_name;
EXIT WHEN emp_cursor%NOTFOUND;
-- 處理每一行數據的邏輯
END LOOP;
CLOSE
關鍵字關閉游標。這將釋放與游標相關的資源。CLOSE emp_cursor;
下面是一個完整的存儲過程示例,該過程使用游標處理employees
表中的所有記錄:
CREATE OR REPLACE PROCEDURE process_employees AS
CURSOR emp_cursor IS
SELECT employee_id, first_name, last_name FROM employees;
emp_id employees.employee_id%TYPE;
emp_first_name employees.first_name%TYPE;
emp_last_name employees.last_name%TYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO emp_id, emp_first_name, emp_last_name;
EXIT WHEN emp_cursor%NOTFOUND;
-- 處理每一行數據的邏輯
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_id || ', First Name: ' || emp_first_name || ', Last Name: ' || emp_last_name);
END LOOP;
CLOSE emp_cursor;
END process_employees;
要調用此存儲過程,請使用以下命令:
BEGIN
process_employees();
END;