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