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)