指定一个分区除了使用分区名称外,很多时候还可以使用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