熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

10G技術文檔中對MODLE的描述

2013-11-13 15:33:14  來源: Oracle 

  概述

  利用 SQL MODEL 子句您可以根據查詢結果定義多維數組然後將規則應用於該數組以計算新值這些規則可以是復雜的相互依賴的計算與外部解決方案相比通過將高級計算集 成到數據庫中可以大幅度提升性能可伸縮性以及可管理性用戶可以將數據保留在 Oracle 環境內而無需將數據復制到單獨的應用程序或 PC 電子表格中

  MODEL 子句通過將查詢列映射到以下三組來定義多維數組分區列維度列和度量列這些元素執行以下任務

  分區以類似於分析函數的分區方式(在數據倉庫指南中標題為數據倉庫中用於分析的 SQL的一章中有述)來定義結果集的邏輯塊將 MODEL 規則應用於每分區的單元格

  維度用於標識分區內的每個度量單元格這些列用於標識日期區域以及產品名之類的特征

  度量類似於星型模式中事實表的度量它們通常包含數值例如銷售單位或成本通過指定每個單元格的完整維度組合可以在單元格所處的分區內對其進行訪問

  要針對這些多維數組創建規則您需要定義以維度值形式表達的計算規則規則靈活且簡潔並且可以使用通配符和 FOR 循環以最大限度地表達您的意圖利用 MODEL 子句構建的計算通過將分析集成到數據庫中改善了傳統的電子表格計算通過符號引用提高了可讀性並提供了可伸縮性和更好的可管理性

  測試案例:

  按月份得到quantity的累加值

  SQL> with tmp as (

    select Jan Month Quantity from dual

   union

    select Feb from dual

   union

    select Mar from dual

   union

    select Apr from dual

   union

    select May from dual   ) select MonthQuantity_count from

   tmp

   model ignore nav /* &keep nav*/

   partition by (X as x)

   dimension by (Month)

   measures (Quantity as Quantity_count)

   rules

    (Quantity_count[Jan]=Quantity_count[Jan]   Quantity_count[Feb]=Quantity_count[Jan]+Quantity_count[Feb]   Quantity_count[Mar]=Quantity_count[Feb]+Quantity_count[Mar]   Quantity_count[Apr]=Quantity_count[Mar]+Quantity_count[Apr]

   Quantity_count[May]=Quantity_count[Apr]+Quantity_count[May]

   )

   /

  MONTH QUANTITY_COUNT

  

  Apr

  Feb

  Jan

  Mar

  May

  SQL>

  同樣累加值也可以通過下面語句得到

  SQL>

  SQL> with tmp as (

    select Month Quantity from dual

   union

    select from dual

   union

    select from dual

   union

    select from dual

   union

    select from dual   )select tmonthsum(tquantity) Quantity_count

   from tmp t left join tmp t

    on tmonth<=tmonth   group by tmonth

   order by

   /

  MONTH QUANTITY_COUNT

  

  

  

  

  

  

  SQL>

  其中指定ignore nav&keep nav處理NULL度量和缺失單元格

  更多說明及案例請參考ORACLE官方說明

  sqlmodel/


From:http://tw.wingwit.com/Article/program/Oracle/201311/16907.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.