利用 SQL MODEL 子句,您可以根據查詢結果定義多維數組,然后將規則應用于該數組以計算新值。這些規則可以是復雜的相互依靠的計算。與外部解決方案相比,通過將高級計算集成到數據庫中,可以大幅度提升性能、可伸縮性以及可治理性。 用戶可以將數據保留在 Oracle 環境內,而無需將數據復制到單獨的應用程序或 PC 電子表格中。 MODEL 子句通過將查詢列映射到以下三組來定義多維數組:分區列、維度列和度量列。這些元素執行以下任務: 分區以類似于分析函數的分區方式(在數據倉庫指南中標題為“數據倉庫中用于分析的 SQL”的一章中有述)來定義結果集的邏輯塊。將 MODEL 規則應用于每個分區的單元格。 維度用于標識分區內的每個度量單元格。這些列用于標識日期、區域以及產品名之類的特征。 度量類似于星型模式中事實表的度量。它們通常包含數值,例如銷售單位或成本。通過指定每個單元格的完整維度組合,可以在單元格所處的分區內對其進行訪問。 要針對這些多維數組創建規則,您需要定義以維度值形式表達的計算規則。規則靈活且簡潔,并且可以使用通配符和 FOR 循環,以最大限度地表達您的意圖。利用 MODEL 子句構建的計算通過將分析集成到數據庫中改善了傳統的電子表格計算,通過符號引用提高了可讀性,并提供了可伸縮性和更好的可治理性。 下圖使用假設的銷售表格從概念的角度概述了該模型的特征。該表格具有四列:國家/地區、產品、年份和銷售量。該圖分為三個部分。上段闡釋了將表格劃分為分區、維和度量三列的概念。中段給出了兩個假想規則,以猜測 PRod1 和 Prod2 的銷售,因為產品銷售的計算值來自前兩年。最后,第三部分顯示了將規則應用于這個包含假設數據的表格后得出的查詢輸出。黑色輸出是從數據庫檢索的數據,而藍色輸出表示根據規則計算出的行。請注重,這些規則是在每個分區內應用的。
COUNTRY PRODUCT YEAR SALES 分區 維度 維度 度量 A prod1 2000 10 A prod1 2001 15 A prod2 2000 12 A prod2 2001 16 B prod1 2000 21 B prod1 2001 23 B prod2 2000 28 B prod2 2001 29 A prod1 2002 25 A prod2 2002 28 B prod1 2002 44 B prod2 2002 57
請注重,MODEL 子句沒有更新表格中的現有數據,也沒有向表格中插入新數據 要更改表格中的值,必須將模型結果提供給 INSERT、UPDATE 或 MERGE 語句。 案例 通過使用 MODEL 子句,您可以將電子表格計算引入數據庫。您將使用 Sales History 模式數據并通過包含新 MODEL 子句的 SELECT 語句來執行類似電子表格的計算。您需要標識規則,以找出諸如銷售猜測之類的信息。 前提條件 開始本教程之前,您應該: 1.完成了教程在 Windows 上安裝 Oracle 數據庫 10g。 2.下載 model_clause.zip 并將其解壓縮到您的工作目錄(例如,c:/wkdir) 設置示例數據 使用 SH 模式創建視圖。該視圖將按國家/地區提供產品銷售的年度總計(總款和總量),并跨所有渠道進行聚集。 1.啟動一個 SQL*Plus 會話。選擇開始 > 程序 > Oracle-OraDB10g_home > application Development > SQL Plus。 (注重:本教程假設您擁有 c:/wkdir 文件夾。假如沒有,則需要創建此文件夾,并將 model_clause.zip 的內容解壓縮到此文件夾中。當執行這些腳本時,指定路徑)
2.以 SH 用戶的身份登錄。輸入 SH 作為 User Name,并輸入 SH 作為 PassWord。然后單擊 OK。