热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracle中MODEL子句的再探

oracle中MODEL子句的再探model的语法如下:MODEL[<globalreferenceoptions>][<referencemodels>][MAIN<main-name>][PARTITIONBY(<cols>)]DIMENSIONBY(<cols

oracle中MODEL子句的再探
 
model的语法如下:
 
MODEL
[]
[]
[MAIN ]
  [PARTITION BY ()]
  DIMENSION BY ()
  MEASURES ()
  []
  [RULES]  
  (, ,.., )
  www.2cto.com  
  ::=
    ::= RETURN {ALL|UPDATED} ROWS
  ::=
  [IGNORE NAV | [KEEP NAV]
  [UNIQUE DIMENSION | UNIQUE SINGLE REFERENCE]
  ::=  www.2cto.com  
  [UPDATE | UPSERT | UPSERT ALL]
  [AUTOMATIC ORDER | SEQUENTIAL ORDER]
  [ITERATE ()  [UNTIL ]]
  ::= REFERENCE ON ON ()
  DIMENSION BY () MEASURES ()
 
先解释一下关键字:
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。  www.2cto.com  
UPSERT ALL 在上面的基础上,左侧单元可以使用IN,ANY等谓词。
 
UPSERT的执行过程:
1、找出左侧单元的逻辑引用,谓词也是逻辑引用。
2、计算出逻辑引用的笛卡尔积集合。
3、和位置引用一起得出需要运算的单元集。
4、根据RULE规则更新或新增记录。
 
指标运算:
可以使用自带的一些函数,当前维度值可以使用CV(),只能用在单元引用,如果是外面则必须加上维度名。
维度为ANY、FOR、BETWEEN等时,可以在单元后面加上ORDER BY 维度名,固定单元计算的顺序。
右侧表达式可以有分析函数,聚合函数等。
 
 
 
作者 hulubo

推荐阅读
author-avatar
三千仇人-奈我何
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有