Oracle 分区表的 FOR 语句,你这样用过吗?

作者:杨廷琨

原文链接:

https://www.modb.pro/db/15418

在11g以后,Oracle简化了指定分区的方式,不再需要明确指定分区名称,而是可以通过指定分区键值列数据的方式来指向对应的分区。

指定一个分区除了使用分区名称外,很多时候还可以使用FOR语句。从11g开始,对分区进行操作的时候,不仅可以使用分区名称,还可以使用FOR语句。

在10g中,MERGE RANGE分区的语句如下:

而在11g中,除了使用分区名称外,还可以使用FOR语句来代替,比如:

这种语法的优势对于范围分区还不是很明显,而对于INTERVAL分区就十分有意义了。由于INTERVAL分区的分区名称是系统产生的,用户对INTERVAL分区最直观的莫过于存在分区中的数据的范围,根据分区的定义和INTERVAL的设置很容易可以确定分区的范围和其中的数据,但是分区的名称就必须通过数据字典才能查询得到。

一个INTERVAL分区的简单的例子:

继续上面的例子:

下面打算通过FOR语句的方式合并P2和P3分区:

根据错误文档的描述,感觉是分区键值指定出现了错误,查询分区信息:

难道是分区键值指定有问题:

最终发现了问题所在,FOR语句中指定的并不是分区定义时使用的值,而是存储在当前分区中的值:

因此Oracle并非根据分区定义来判断分区,而是根据用户给出的值,来判断所属分区,所以,P1分区和SYS_P78分区的合并完全可以写成:

由于FOR语句的这种特性,使得HASH分区也可以使用这个特性:

这个例子对包含ID为6的分区进行了MOVE操作,而且甚至不需要指定的ID存在。

最后给一个简单的LIST分区的SPLIT的例子:

想了解更多关于数据库、云技术的内容吗?

快来关注“数据和云"、"云和恩墨,"公众号及"云和恩墨"官方网站,我们期待大家一同学习与进步!

小程序”DBASK“在线问答,随时解惑,欢迎了解和关注!


下一篇:Oracle 发力 MySQL,MariaDB 成功上市,大规模融资锐减