首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

資料庫游標使用完整指南:顯式/隱式游標、屬性、FOR LOOP、動態游標

     編輯:MySQL 資料庫相關知識

游標概念

游標是指向結果集中某一行的指標,讓程式能逐行處理查詢結果。分為:

  • 隱式游標:SELECT ... INTO ...、DML、觸發器自動建立,僅處理單行。
  • 顯式游標:程式設計師宣告,對應多行結果集,需手動 OPEN/FETCH/CLOSE。

顯式游標四步驟

  1. 宣告:
    CURSOR cur_name (param1 type, ...) IS
    SELECT ... FROM ... WHERE ...;
  2. 開啟:OPEN cur_name (arg1, ...); — 執行查詢,結果集載入游標。
  3. 擷取:FETCH cur_name INTO var1, var2, ...; 或 FETCH cur_name INTO rec_var;(rec_var cur_name%ROWTYPE)。每次 FETCH 移至下一行。
  4. 關閉:CLOSE cur_name; — 釋放資源。

隱式游標屬性

屬性型別含義
SQL%ISOPENBOOLEAN游標是否開啟(執行中 TRUE,結束 FALSE)
SQL%FOUNDBOOLEAN最近 DML/單行查詢是否影響/返回資料
SQL%NOTFOUNDBOOLEANSQL%FOUND 相反
SQL%ROWCOUNTNUMBER目前為止影響/返回的行數

游標 FOR LOOP 簡化寫法

FOR rec IN cur_name(param) LOOP
    DBMS_OUTPUT.PUT_LINE(rec.col1 || ' ' || rec.col2);
END LOOP;
-- 自動 OPEN、FETCH、CLOSE,不可在迴圈中再使用 OPEN/FETCH/CLOSE

動態游標

執行期動態組裝查詢:

TYPE ref_cur IS REF CURSOR;
c ref_cur;
OPEN c FOR 'SELECT ... WHERE id = ' || v_id;
FETCH c INTO ...;
CLOSE c;

範例:查詢員工編號 7788 的姓名、職稱、薪資

DECLARE
    v_ename emp.ename%TYPE;
    v_job   emp.job%TYPE;
    CURSOR c_emp IS SELECT ename, job FROM emp WHERE empno = 7788;
BEGIN
    OPEN c_emp;
    FETCH c_emp INTO v_ename, v_job;
    DBMS_OUTPUT.PUT_LINE(v_ename || ' ' || v_job);
    CLOSE c_emp;
END;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved