Oracle游標表達式是Oracle數據庫中的重要概念,下面就為您詳細介紹Oracle游標表達式和表函數方面的知識,供您參考學習之用。
Oracle游標表達式(有時稱為游標子隊列)是 SQL 語言的一個元素,在 Oracle9i 之前,SQL 和某些程序設計環境(但不包括 PL/SQL)支持游標表達式。Oracle9i 引入了 PL/SQL 對游標表達式的支持。例如,可以在打開 PL/SQL 游標的 SELECT 語句中使用游標表達式,並在之後進行適當的控制。它也可以作為 PL/SQL 過程或函數的實參來使用,這與表函數結合具有非常大的意義。
Oracle9i 之前的版本也支持表函數(以初步的形式),而在 Oracle9i 中作了許多重大改進。現在可以編寫表函數來將行一經計算就以流水線方式立即發送,極大地改善了 first rows 示例中的響應時間。表函數的編寫現在可以做到接收 SELECT 語句作為輸入,允許將任意數量的變換以菊花鏈形式串接起來,避免了存儲中間結果的需要。而且也可以編寫表函數,使它的計算並行進行,從而利用 Oracle 的並行查詢機制。
能夠並行執行表函數意味著現在無需序列化,就可能在數據倉庫應用程序的提取、轉換和加載 (aka ETL) 階段利用 PL/SQL 的功能。
游標變量 — 概括
Oracle9i 從由本地動態 SQL 值的游標變量批量獲取的增強功能
在 PL/SQL 中使用游標表達式
使用游標表達式作為 PL/SQL 函數的實參
"YOUNG MANAGERS" 示例
表函數 — 概括
流水線表函數 — Oracle9i 新增
從一個表函數輸送數據到下一個表函數 — Oracle9i新增
再次訪問 "Young Managers" 示例 — 表函數方法
Fanout:利用邊界效應使用表函數
表函數並行執行 — Oracle9i新增
基於模式級別類型的表函數語法
當編寫表函數返回模式級別類型時,調用它所需的語法稍微有些冗長。為完整起見,在示例代碼中對其進行示范。
表函數和游標表達式的商務利益
游標表達式允許在兼容查詢中為重用進行邏輯封裝,這改善了開發人員的生產率和應用可靠性。
表函數實現了功能的改善,允許在 SELECT 子句的 FROM 列表中調用來自任意外部數據源的字節組集合和由任意計算合成的字節組集合。為方便起見,它們可以用來定義 VIEW,從而產生了新的功能。
表函數可以將行作為 VIEW 發送 — 這些行來自任意的源於 Oracle 表(因此包括別的表函數)的復雜 PL/SQL 變換 — 並且無需存儲計算後的行。這提高了速度和可伸縮性。並改善了開發人員的生產率和應用可靠性。
表函數的輸入參數使 VIEW 可參數化,更進一步發揮了 VIEW 的作用,這提高了代碼重用性從而改善了開發人員的生產率和應用可靠性。
一個具有參考游標輸入參數的表函數可以作為數據源和另一個表函數一起被調用。因而表函數可以以菊花鏈形式串接起來,從而允許模塊化程序設計並因此使程序設計更容易,並且改善了重用性和應用程序強健性。
表函數可以並行執行,提高了速度和可伸縮性。結合菊花鏈特性,使得表函數尤其適合於執行提取、轉換和加載操作的數據倉庫應用程序。
Fanout(來自表函數中自主事務的 DML)對數據倉庫應用程序添加了特別值得關注的功能。
表函數允許對存儲在內嵌表中的數據如同關聯存儲一樣來查詢,也允許關聯存儲的數據如作為內嵌表存儲的數據一樣來查詢。 (在多層集合代碼示例中給出的賽跑運動員訓練記錄示例中對此進行示范。)這允許數據持續存儲格式與訪問數據的應用程序的設計之間保持真正的獨立。(表函數上可以定義 VIEW,在 VIEW 上可以創建 INSTEAD OF 觸發器來完成畫面。)