《Oracle专题培训》由会员分享,可在线阅读,更多相关《Oracle专题培训(45页珍藏版)》请在金锄头文库上搜索。
1、个人2011Oracle培训-专题主题详细描述hanshouzhong中国.上海目 录一 并行执行4n含义4n启用并行查询4n启用PDML4nPDML限制4nPDDL范围5nPDDL说明5二 分析函数5n语法5n子句总结11n窗口实验12n分类13n分析函数描述13n例子14三 直接路径插入36n含义36n支持类型36n使用方法36n限制36n缺点36四 物化视图37五 聚合函数扩展37nROLLUP子句37nCUBE子句39nGROUPING()函数与ROLLUP、CUBE的结合使用40nGROUPING_ID()函数的使用41六 DBMS_SQL43n使用场合43n使用过程43七 DBMS
2、_SCHEDULER44八 层次查询44九 自治事务44一 并行执行n 含义 所谓并行执行,是指能够将一个大型串行任务(任何DML,或一般的DDL)物理地划分为多个较 小的部分,这些较小的部分能够可以同时得到处理.包括并行查询,并行DML(INSERT,UPDATE,DELETE,MERGE),并行DDL(索引重建,创建索 引,数据加载,表重组等),并行恢复和过程并行化.并行执行本质上是一个不可扩缩的解决方案,设计为允许单个用户或一个特定SQL语句占用 数据库的所有资源.所以,在用并行执行之前,需要保证以下两点:1) 必须有一个非常大的任务;2) 必须有足够的可用资源.n 启用并行查询默认情况
3、下,并不启用并行查询。有两种方法启用该功能:1) Hint2) 直接修改表并行度 alter table big_table parallel;由Oracle根据系统的负载情况决定并行数。alter table big_table parallel 4;n 启用PDMLPDML和并行查询是不同的,除非显示的请求PDML,否则不能执行PDML.1) alter table big_table parallel 4;2) alter session enable parallel dml;n PDML限制1)PDML操作期间不支持触发器;2) PDML操作期间不支持某些声明方式引用完整性约束 3)
4、 在提交或回滚之前,不能访问用PDML修改的表 4) PDML不支持高级复制(因为复制特性的实现是给予触发器)5) 不支持延迟约束 6) 不支持分布式事务 7) 不支持聚促表 8) 如果表是分区的,PDML只可能在有位图索引或LOB列的表上执行,并且并行度取决于分区数.如果违反了其中任何一个原则,则语句会串行执行或报错.n PDDL范围 PDDL包括下面几种操作:1) Create index2) Create table as select3) Alter index rebuild4) Alter table move5) Alter table split|coalesce partit
5、ion6) Alter index split partition1) 到4)还适应于单个的表/索引分区. n PDDL说明 1)PDDL操作依赖于直接路径操作,也就是说,数据不传递到缓冲区缓存,而是由一个操作来创建新的 extend,并直接写入这些extend. 2) PDDL3) 在提交或回滚之前,不能访问用PDML修改的表 二 分析函数n 语法Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。其语法如下:FUNCTION_NAME(,)OVER()解释如下:1) FUNCTION_NA
6、ME分析函数名;2) Argement分析函数的参数,每个函数一般有03个参数,参数可以是任何数字类型或是可以隐式转换为数字类型的数据类型,参数可以是表达式;3) Over:关键字,用于标识分析函数,否则不能区别是分析函数还是聚合函数,Over后面的子句描述了分析函数将其执行的数据片段;Over后面的()部分,即使analytic_clause的三个部分全不使用,()也必不可省,否则Oracle因不能识别函数为分析函数而报错。分析函数在查询结果集确定之后才开始进行计算,Analytic_clause就是用来定义函数怎样对查询结果集进行分组计算的。4) Partition-Clause:其语法为
7、PARTITION BY expression .是可选的分区子句,可以使用它来将结果集分组,并将分析函数应用于各组中,而不是全部的结果集中,如果不存在任何的分区子句,则全部的结果集可看做一个单一的大区。5) Order-by-Clause:其语法为ORDER BY expression , expr ASC | DESC NULLS FIRST | NULLS LAST . 。是可选的排序子句,有些分析函数需要它,有些分析函数不需要它。依靠已排序数据的那些分析函数,必须使用该子句,如LAG,其他函数则不需要,如AVG。在使用任何排序的开窗函数时,该子句是强制性的,它指定了在计算分析函数时一组
8、内的数据是如何排序的。Order-by-Clause轮流应用于每个分区中。6) Windowing-Clause:该子句给出了一个定义变化或固定的数据窗口方法,分析函数将对这些数据进行操作。在一组内基于任意变化或固定的窗口中,可用该子句来让分析函数计算它的值。可根据两个标准建立窗口:数据值的范围(RANGE)或与当前行的偏移量(ROW)。注意的是,要使用窗口,必须使用ORDER BY子句。Range窗口:Range指定窗口由物理行构成。该窗口仅对NUMBERS和DATE起作用,否则是无效的。另外的限制是ORDER BY中只能有一列,因为范围实际上是一维的,不能在N维空间中。ROW窗口ROW指定
9、窗口由逻辑偏移量构成。利用ROW窗口,就没有RANGE那样的限制了,数据可以是任意类型的,且ORDER BY可以包括很多列。specifying窗口范围:A ) UNBOUNDED PRECEDING: 指明窗口开始于分组的第一行;B) Unbounded following指明窗口结束于分组的最后一行;C) CURRENT ROW:作为起始点,指明窗口开始于当前行或当前值;作为终结点,指明窗口结束于当前行或当前值;D) BETWEEN: betweenand是关键字,用来指定窗口的起始点和终结点。当窗口范围为Range between unbounded preceding and curr
10、ent row 或Range between current row and unbounded following 时,可以在order_by_clause中使用多个expr对分组进行排序。其他range窗口范围只能使用一个expr。使用rows定义窗口范围无此限制。E) Numberic Expression PRECEDING:对ROW来说,该窗口从当前行之前的数字表达式(Numberic Expression)的行开始;对RANGE来说,则从行序值小于数字表达式的 当前行的值开始,并结束于正在处理的当前行。不论rows还是range窗口,窗口总是在分组中从上至下滑动的。窗口范围可以由b
11、etweenand限定,也可以不用betweenand,不用的都表示窗口到当前行结束。ROWS窗口是由分组排序后分组中若干连续的行构成的窗口。以下是全部合法的ROWS窗口范围:1. Rows between unbounded preceding and unbounded following窗口开始于分组第一行,结束于分组最后一行。2. Rows between unbounded preceding and current row窗口开始于分组第一行,结束于当前行。3. Rows between unbounded preceding and value_expr preceding窗口开
12、始于分组第一行,结束于当前行前value_expr行。4. Rows between unbounded preceding and value_expr following窗口开始于分组第一行,结束于当前行后value_expr行。5. Rows between current row and unbounded following窗口开始于当前行,结束于分组最后一行。6. Rows between current row and current row窗口开始于当前行,结束于当前行。7. Rows between current row and value_expr following窗口
13、开始于当前行,结束于当前行后value_expr行。8. Rows between value_expr preceding and unbounded following窗口开始于当前行前value_expr行,结束于分组最后一行。9. Rows between value_expr preceding and current row窗口开始于当前行前value_expr行,结束于当前行。10. Rows between value_expr1 preceding and value_expr2 preceding窗口开始于当前行前value_expr1行,结束于当前行前value_expr
14、2行。11. Rows between value_expr1 preceding and value_expr2 following窗口开始于当前行前value_expr1行,结束于当前行后value_expr2行。12. Rows between value_expr following and unbounded following窗口开始于当前行后value_expr行,结束于分组最后一行。13. Rows between value_expr1 following and value_expr2 following窗口开始于当前行后value_expr1行,结束于当前行后value_expr2行。14. Rows unbounded preceding与2等价。15.