標準顯式游標循環模板
CREATE OR REPLACE PROCEDURE procedure_name AS
BEGIN
DECLARE
s_para VARCHAR2(50);
s_para2 VARCHAR2(50);
CURSOR c_cursor IS SELECT id, name FROM temp_table;
BEGIN
OPEN c_cursor;
LOOP
FETCH c_cursor INTO s_para, s_para2;
EXIT WHEN c_cursor%NOTFOUND;
-- 業務邏輯處理
NULL;
END LOOP;
CLOSE c_cursor;
END;
END;
/
關鍵點解析
- DECLARE 區塊:定義變量與游標,游標查詢可帶參數化 WHERE 條件。
- OPEN / FETCH / CLOSE:標準三步驟,務必成對出現,防止游標泄漏。
- %NOTFOUND 屬性:判斷是否還有下一行,比手工計數更可靠。
- 異常處理:生產環境建議在 LOOP 內包裹
BEGIN ... EXCEPTION ... END;,單行失敗不影響整體循環。
進階提示
- 大數據量場景考慮
BULK COLLECT ... LIMIT 批量獲取,減少上下文切換。
- 游標可定義為
SYS_REFCURSOR 供應用層消費(如 Java、.NET)。
- Oracle 10g+ 支持隱式游標
FOR rec IN (SELECT ...) LOOP 寫法,代碼更簡潔。