指定一个分区除了使用分区名称外,很多时候还可以使用FOR语句。
从11g开始,对分区进行操作的时候,不仅可以使用分区名称,还可以使用FOR语句。
在10g中,MERGE RANGE分区的语句如下:
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database10gEnterpriseEdition Release10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Solaris: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
SQL> CREATE TABLE T_PART_RANGE
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 (PARTITION P1 VALUES LESS THAN (TO_DATE('2009-1', 'YYYY-MM')),
7 PARTITION P2 VALUES LESS THAN (TO_DATE('2009-4', 'YYYY-MM')),
8 PARTITION P3 VALUES LESS THAN (TO_DATE('2009-7', 'YYYY-MM')));
表已创建。
SQL> ALTER TABLE T_PART_RANGE
2 MERGE PARTITIONS P2, P3
3 INTO PARTITION P3;
表已更改。
而在11g中,除了使用分区名称外,还可以使用FOR语句来代替,比如:
SQL> SELECT * FROM V$VERSION;
BANNER
--------------------------------------------------------------------------------
Oracle Database11gEnterprise Edition Release11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> CREATE TABLE T_PART_RANGE
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 (PARTITION P1 VALUES LESS THAN (TO_DATE('2009-1', 'YYYY-MM')),
7 PARTITION P2 VALUES LESS THAN (TO_DATE('2009-4', 'YYYY-MM')),
8 PARTITION P3 VALUES LESS THAN (TO_DATE('2009-7', 'YYYY-MM')));
表已创建。
SQL> ALTER TABLE T_PART_RANGE
2 MERGE PARTITIONS
3 FOR(TO_DATE('2009-01', 'YYYY-MM')),
4 FOR(TO_DATE('2009-04', 'YYYY-MM'))
5 INTO PARTITION P3;
表已更改。
这种语法的优势对于范围分区还不是很明显,而对于INTERVAL分区就十分有意义了。由于INTERVAL分区的分区名称是系统产生的,用户对INTERVAL分区最直观的莫过于存在分区中的数据的范围,根据分区的定义和INTERVAL的设置很容易可以确定分区的范围和其中的数据,但是分区的名称就必须通过数据字典才能查询得到。
一个INTERVAL分区的简单的例子:
SQL> CREATE TABLE T_PART_INTER
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 INTERVAL (INTERVAL '3' MONTH)
7 (PARTITION P1 VALUES LESS THAN (TO_DATE('2009-1', 'YYYY-MM')),
8 PARTITION P2 VALUES LESS THAN (TO_DATE('2009-4', 'YYYY-MM')));
表已创建。
SQL> INSERT INTO T_PART_INTER
2 SELECT ROWNUM, OBJECT_NAME, SYSDATE - ROWNUM * 10
3 FROM USER_OBJECTS;
已创建9行。
SQL> COMMIT;
提交完成。
SQL> ALTER TABLE T_PART_INTER
2 MERGE PARTITIONS
3 FOR(TO_DATE('2009-10', 'YYYY-MM')),
4 FOR(TO_DATE('2010-1', 'YYYY-MM'));
表已更改。
oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html