ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 分区表述的FOR语句(一)

分区表述的FOR语句(一)

原创 Linux操作系统 作者:yangtingkun 时间:2010-03-03 23:59:12 0 删除 编辑

指定一个分区除了使用分区名称外,很多时候还可以使用FOR语句。

 

 

从11g开始,对分区进行操作的时候,不仅可以使用分区名称,还可以使用FOR语句。

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

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.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 Database 11g Enterprise Edition Release 11.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'));

表已更改。

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-628546/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077331