oracle中MODEL子句的再探

model的語法以下:數組

MODEL
[<global reference options>]
[<reference models>]
[MAIN <main-name>]
  [PARTITION BY (<cols>)]
  DIMENSION BY (<cols>)
  MEASURES (<cols>)
  [<reference options>]
  [RULES]  <rule options>
  (<rule>, <rule>,.., <rule>)

  <global reference options> ::= <reference options> <ret-opt>
   <ret-opt> ::= RETURN {ALL|UPDATED} ROWS
  <reference options> ::=
  [IGNORE NAV | [KEEP NAV]
  [UNIQUE DIMENSION | UNIQUE SINGLE REFERENCE]
  <rule options> ::=
  [UPDATE | UPSERT | UPSERT ALL]
  [AUTOMATIC ORDER | SEQUENTIAL ORDER]
  [ITERATE (<number>)  [UNTIL <condition>]]
  <reference models> ::= REFERENCE ON <ref-name> ON (<query>)
  DIMENSION BY (<cols>) MEASURES (<cols>) <reference options>

先解釋一下關鍵字:
MODEL 標示字。
RETURN {ALL|UPDATED} ROWS 返回的結果集是否只包含修改或新增的記錄,默認是ALL。
MAIN 當有引用子MODEL時,標示如下條件是主MODEL的條件。
PARTITION BY 按參數中的列分組,以後的運算都是分組進行的;參數能夠是表達式,可是必須有別名。
DIMENSION BY 聲明各分組中的維度字段,至關於多維鍵值對的建,字段值即鍵;參數能夠是表達式,可是必須有別名。
MEASURES 聲明各分組中的指標字段,即鍵值對中的值;參數能夠是表達式,可是必須有別名。
IGNORE NAV|KEEP NAV 替換null|保留null,0替換數組,空格替換字符,01-JAN-2001 替換日期,null替換其餘,默認是KEEP NAV 。
UNIQUE DIMENSION|UNIQUE SINGLE REFERENCE 組內維度惟一|右側引用惟一,默認是UNIQUE DIMENSION,右側引用惟一的另外一個區別是可能更新多個單元,由於左側單元可能不惟一。
RULES [UPDATE|UPSERT|UPSERT ALL] 指標計算規則,更新|更新和簡單插入|更新和複雜插入,默認是UPSERT
AUTOMATIC ORDER|SEQUENTIAL ORDER 指標計算的順序,邏輯依賴順序|書寫順序,默認是SEQUENTIAL ORDER 。
ITERALTE(N) [UNTIL(C)] 重複N次的計算,直到知足C的條件退出。
REFERENCE name ON (select子句) 維度、指標定義,內嵌子MODEL,主MODEL中使用name引用。函數

UPDATE 只更新已有單元,不存在則無效果。
UPSERT 在上面的基礎上,若是左側單元是以位置引用的話,則不存在就插入;FOR也是位置引用,可是更新的單元爲FOR列表和其餘維度的交叉乘集;左側單元使用ANY引用,不會產生新單元,ANY的意思是IS NULL OR IS NOT NULL。
UPSERT ALL 在上面的基礎上,左側單元可使用IN,ANY等謂詞。spa

UPSERT的執行過程:
一、找出左側單元的邏輯引用,謂詞也是邏輯引用。
二、計算出邏輯引用的笛卡爾積集合。
三、和位置引用一塊兒得出須要運算的單元集。
四、根據RULE規則更新或新增記錄。it

指標運算:
可使用自帶的一些函數,當前維度值可使用CV(),只能用在單元引用,若是是外面則必須加上維度名。
維度爲ANY、FOR、BETWEEN等時,能夠在單元后面加上ORDER BY 維度名,固定單元計算的順序。
右側表達式能夠有分析函數,聚合函數等。
 io

相關文章
相關標籤/搜索