ALTER TABLE…ADD PARTITION命令用于将分区添加到现有的分区表中。
语法介绍
使用ALTER TABLE…ADD PARTITION命令把分区添加到现有的分区表中。语法如下:
ALTER TABLE table_name ADD PARTITION partition_definition;
其中 partition_definition 是:
{list_partition | range_partition}
list_partition 是:
PARTITION [partition_name]
VALUES (value[, value]...)
[TABLESPACE tablespace_name]
[(subpartition, ...)]
range partition 是:
PARTITION [partition_name]
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]
[(subpartition, ...)]
其中 subpartition 是:
{list subpartition | range subpartition}
list subpartition 是:
SUBPARTITION [subpartition_name]
VALUES (value[, value]...)
[TABLESPACE tablespace_name]
range subpartition 是:
SUBPARTITION [subpartition_name ]
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]
描述
ALTER TABLE…ADD PARTITION命令用于将分区添加到现有的分区表中。在分区表中对于定义的分区数量没有上限。
新的分区必须与现有分区的类型(LIST or RANGE)相同。新分区规则必须引用和定义现有分区的分区规则中指定的相同列。
您不能使用ALTER TABLE…ADD PARTITION语句把分区添加到带有MAXVALUE或 DEFAULT规则的表中。需要注意的是,您可以交替使用ALTER TABLE。SPLIT PARTITION语句对现有分区进行划分,有效增加表中的分区数量。
RANGE分区必须以升序的方式指定。您不能把新分区添加在RANGE分区表中现有的分区之前。
包括TABLESPACE子句指定新分区要所属的表空间。如果您没有指定表空间, 那么分区将所属于缺省表空间。
如果对表进行了索引设置, 那么索引将创建在新分区上。 要使用ALTER TABLE…ADD PARTITION命令,您必须是表的拥有者或有超级用户(或管理员)的权限。
参数
参数 | 参数说明 |
---|---|
table name | 要创建的表名称(可以采用模式限定的方式引用)。 |
partition name | 要创建的分区名称。分区名称在所有分区和子分区中必须是唯一的,且必须遵循给对象标识符命名的惯例。 |
subpartition name | 要创建的子分区名称。子分区名称在所有分区和子分区中必须是唯一的,且必须遵循给对象标识符命名的惯例。 |
(value[, value]...) | 使用value 来指定一个引用的文本值(或以逗号分隔的文本值列表)将表项目划分为不同的分区。每个分区规则必须至少指定一个值,但在规则中对于指定的值的数量没有上限要求。Value 可能为null 、 default (如果指定了一个list 分区的话)或 maxvalue (如果指定了一个range 分区的话)。
更多关于创建 |
tablespace name | 分区或子分区所属的表空间名称。 |
添加分区到LIST 分区表示例
下列示例把分区添加到列表分区表sales中。通过使用下列命令创建表:
CREATE TABLE sales
(
dept_no number,
part_no varchar2,
country varchar2(20),
date date,
amount number
)
PARTITION BY LIST(country)
(
PARTITION europe VALUES('FRANCE', 'ITALY'),
PARTITION asia VALUES('INDIA', 'PAKISTAN'),
PARTITION americas VALUES('US', 'CANADA')
);
表包含三个分区(americas、asia 和 europe):
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
partition_name | high_value
----------------+---------------------
americas | 'US', 'CANADA'
asia | 'INDIA', 'PAKISTAN'
europe | 'FRANCE', 'ITALY'
(3 rows)
下述命令用于添加分区east_asia到表sales中:
ALTER TABLE sales ADD PARTITION east_asia
VALUES ('CHINA', 'KOREA');
在调用这个命令之后, 表包括了east_asia分区。
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
partition_name | high_value
----------------+---------------------
east_asia | 'CHINA', 'KOREA'
americas | 'US', 'CANADA'
asia | 'INDIA', 'PAKISTAN'
europe | 'FRANCE', 'ITALY'
(4 rows)
添加分区到RANGE 分区表示例
下列示例添加了一个分区到范围分区表sales中:
CREATE TABLE sales
(
dept_no number,
part_no varchar2,
country varchar2(20),
date date,
amount number
)
PARTITION BY RANGE(date)
(
PARTITION q1_2012
VALUES LESS THAN('2012-Apr-01'),
PARTITION q2_2012
VALUES LESS THAN('2012-Jul-01'),
PARTITION q3_2012
VALUES LESS THAN('2012-Oct-01'),
PARTITION q4_2012
VALUES LESS THAN('2013-Jan-01')
);
表包含四个分区(q1_2012、q2_2012、q3_2012 和 q4_2012):
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
partition_name | high_value
----------------+---------------
q4_2012 | '2013-Jan-01'
q3_2012 | '2012-Oct-01'
q2_2012 | '2012-Jul-01'
q1_2012 | '2012-Apr-01'
(4 rows)
下列命令添加了一个名为q1_2013的分区到表sales 中:
ALTER TABLE sales ADD PARTITION q1_2013
VALUES LESS THAN('01-APR-2013');
在调用这个命令之后,表包括了分区q1_2013:
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
partition_name | high_value
----------------+---------------
q1_2012 | '2012-Apr-01'
q2_2012 | '2012-Jul-01'
q3_2012 | '2012-Oct-01'
q4_2012 | '2013-Jan-01'
q1_2013 | '01-APR-2013'
(5 rows)