supports splitting partitions or subpartitions. This topic describes the syntax and provides examples.
Syntax
Split a partition
The ALTER TABLE…SPLIT PARTITION
statement splits a partition into two and redistributes the data between the new partitions.
ALTER TABLE <table_name> SPLIT PARTITION <partition_name>
AT (<range_part_value>)
INTO
(
PARTITION <new_part1>
[TABLESPACE <tablespace_name>]
PARTITION <new_part2>
[TABLESPACE <tablespace_name>]
);
ALTER TABLE <table_name> SPLIT PARTITION <partition_name>
VALUES (<value>[, <value>]...)
INTO
(
PARTITION <new_part1>
[TABLESPACE <tablespace_name>]
PARTITION <new_part2>
[TABLESPACE <tablespace_name>]
);
Split a subpartition
The ALTER TABLE…SPLIT SUBPARTITION
statement splits a subpartition into two and redistributes the data between the new subpartitions.
ALTER TABLE <table_name> SPLIT SUBPARTITION <subpartition_name>
AT (range_part_value)
INTO
(
SUBPARTITION <new_subpart1>
[TABLESPACE <tablespace_name>],
SUBPARTITION <new_subpart2>
[TABLESPACE <tablespace_name>]
);
ALTER TABLE <table_name> SPLIT SUBPARTITION <subpartition_name>
VALUES (<value>[, <value>]...)
INTO
(
SUBPARTITION <new_subpart1>
[TABLESPACE <tablespace_name>],
SUBPARTITION <new_subpart2>
[TABLESPACE <tablespace_name>]
);
You can use the ALTER TABLE... SPLIT SUBPARTITION
command to add a subpartition to an existing subpartitioned table. There is no limit to the number of subpartitions that can be defined. When executing the ALTER TABLE...SPLIT SUBPARTITION
statement, creates two new subpartitions and then moves the records that meet the constraints to new_subpart1
and the other records to new_subpart2
.
Examples
Split a partition
You can use an ALTER TABLE...SPLIT PARTITION
statement to add partitions to an existing list- or range-partitioned table.
Hash-partitioned tables are not supported.
--Split a list partition
ALTER TABLE sales SPLIT PARTITION americas
VALUES ('US')
INTO (PARTITION us, PARTITION canada);
--Split a range partition
ALTER TABLE sales SPLIT PARTITION q4_2012
AT ('15-Nov-2012')
INTO
(
PARTITION q4_2012_p1,
PARTITION q4_2012_p2
);
Split a list subpartition
CREATE TABLE sales
(
dept_no number,
part_no varchar2,
country varchar2(20),
date date,
amount number
)
PARTITION BY RANGE(date)
SUBPARTITION BY LIST (country)
(
PARTITION first_half_2012 VALUES LESS THAN('01-JUL-2012')
(
SUBPARTITION p1_europe VALUES ('ITALY', 'FRANCE'),
SUBPARTITION p1_americas VALUES ('US', 'CANADA')
),
PARTITION second_half_2012 VALUES LESS THAN('01-JAN-2013')
(
SUBPARTITION p2_europe VALUES ('ITALY', 'FRANCE'),
SUBPARTITION p2_americas VALUES ('US', 'CANADA')
)
);
ALTER TABLE sales SPLIT SUBPARTITION p2_americas
VALUES ('US')
INTO
(
SUBPARTITION p2_us,
SUBPARTITION p2_canada
);
Split a range subpartition
CREATE TABLE sales
(
dept_no number,
part_no varchar2,
country varchar2(20),
date date,
amount number
)
PARTITION BY LIST(country)
SUBPARTITION BY RANGE(date)
(
PARTITION europe VALUES('FRANCE', 'ITALY')
(
SUBPARTITION europe_2011
VALUES LESS THAN('2012-Jan-01'),
SUBPARTITION europe_2012
VALUES LESS THAN('2013-Jan-01')
),
PARTITION asia VALUES('INDIA', 'PAKISTAN')
(
SUBPARTITION asia_2011
VALUES LESS THAN('2012-Jan-01'),
SUBPARTITION asia_2012
VALUES LESS THAN('2013-Jan-01')
),
PARTITION americas VALUES('US', 'CANADA')
(
SUBPARTITION americas_2011
VALUES LESS THAN('2012-Jan-01'),
SUBPARTITION americas_2012
VALUES LESS THAN('2013-Jan-01')
)
);
ALTER TABLE sales
SPLIT SUBPARTITION americas_2012
AT('2012-Jun-01')
INTO
(
SUBPARTITION americas_p1_2012,
SUBPARTITION americas_p2_2012
);