首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

淺談 Oracle 中的面向對象與面向集合思維

     編輯:Oracle 教學

淺談 Oracle 中的面向對象與面向集合思維

SQL 本質是面向集合的語言,但現代 Oracle 融入了許多面向對象的特性。本文從游標、Package、集合操作三個維度,探討兩種思維在 Oracle 開發中的體現與融合。

一、Oracle 的面向對象特性

1. 遊標 — 類似迭代器模式

DECLARE
  CURSOR students IS SELECT sid, name, age, hobby FROM my_test;
  student_rec students%ROWTYPE;
BEGIN
  FOR student_rec IN students LOOP
    DBMS_OUTPUT.PUT_LINE('學號:' || student_rec.sid || ' 姓名:' || student_rec.name);
  END LOOP;
END;

FOR ... IN cursor 語法極類似 C# foreach,student_rec.sid 的屬性存取方式具有強烈的物件導向感覺。

2. Package — 封裝與命名空間

DBMS_OUTPUT.PUT_LINE()、UTL_FILE.FOPEN() 等內建套件,結構上就是「類 + 靜態方法」。自訂 Package 更能實現:

  • 公開/私有程序/函數區分 (SPEC vs BODY)。
  • 狀態保持 (Package 級變數跨呼叫保持)。
  • 邏輯內聚,減少命名衝突。

二、Oracle 的面向集合核心

關聯式資料庫基於集合論,SQL 旨在聲明式描述「要什麼」而非「怎麼做」。

1. 基於成本優化器 (CBO)

Oracle 10g+ 採用 CBO,依統計資訊選擇執行計劃。理解存取路徑 (Full Scan, Index Range Scan, Hash Join 等) 是寫出高效 SQL 的前提。

2. 集合思維程式設計原則

  • 集合操作替代迴圈:單一 INSERT ... SELECT 取代 PL/SQL 迴圈逐筆插入。
  • 減少區塊存取:利用索引、分區、物化視圖降低 I/O。
  • 集合運算子:UNION, INTERSECT, MINUS 處理集合關係。

3. 解釋計劃與執行計劃

善用 EXPLAIN PLAN、DBMS_XPLAN.DISPLAY_CURSOR 分析:

  • Cardinality 估算是否準確?
  • 是否產生不必要的排序/雜湊?
  • 驅動表選擇是否最小結果集?

三、融合與實踐

「誰都能寫出電腦看懂的代碼,只有有思想的程式設計師才能寫出人人都能看懂的程式碼。」

  • 用面向集合的 SQL 處理資料邏輯 (高效、簡潔)。
  • 用面向對象的 PL/SQL 組織業務流程 (封裝、複用、維護性)。
  • 兩者互補,而非對立。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved