指定一個分區除了使用分區名稱外,很多時候還可以使用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'));
表已更改。