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

Oracle 9i 游標完整指南:定義、打開、提取、關閉與屬性應用

     編輯:Oracle 資料庫相關知識

游標概念

游標是從數據表提取的結果集在內存中的臨時存儲,帶有一個指針指向當前行,通過 FETCH 移動指針實現逐行處理,最終將結果寫回數據庫。

游標定義語法

CURSOR 游標名 IS SELECT 語句;

示例:定義變量 tempsal 類型同 scott.emp.sal,游標 mycursor 查詢薪資大於該變量的記錄。

SET SERVEROUTPUT ON
DECLARE
  tempsal scott.emp.sal%TYPE;
  CURSOR mycursor IS SELECT * FROM scott.emp WHERE sal > tempsal;
BEGIN
  tempsal := 800;
  OPEN mycursor;
END;

執行結果見圖,腳本:第9章\cursordefine.sql。

打開游標

OPEN 游標名; 兩步驟:① 將符合條件記錄載入內存 ② 指針指向首行。

提取數據

語法:FETCH 游標名 INTO 變量列表 | 記錄型變量;

示例:定義 cursorrecord mycursor%ROWTYPE,提取首行並輸出 deptno。

DECLARE
  tempsal scott.emp.sal%TYPE;
  CURSOR mycursor IS SELECT * FROM scott.emp WHERE sal > tempsal;
  cursorrecord mycursor%ROWTYPE;
BEGIN
  tempsal := 800;
  OPEN mycursor;
  FETCH mycursor INTO cursorrecord;
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(cursorrecord.deptno));
END;

腳本:cursorfetch.sql,執行截圖如圖。

關閉游標

CLOSE 游標名; 釋放內存資源,防止游標洩漏。

游標屬性應用

屬性用途
%ISOPEN判斷游標是否已打開,未打開時 FETCH 會報錯
%FOUND最近一次 FETCH 是否返回行
%NOTFOUND與 %FOUND 互斥
%ROWCOUNT已提取的行數

%ISOPEN 實戰

IF mycursor%ISOPEN THEN
  FETCH mycursor INTO cursorrecord;
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(cursorrecord.deptno));
ELSE
  DBMS_OUTPUT.PUT_LINE('游標沒有打開!');
END IF;

執行截圖見圖,腳本隱含於示例中。

總結

掌握游標生命周期(定義→打開→循環提取→關閉)與屬性檢查,是編寫高效 PL/SQL 過程式的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved