使用ALTER TABLE…MERGE PARTITION
命令可以將兩個分區合并為一個新分區,新分區中包含原有兩個分區的內容。
說明
- 您必須是表的所有者或擁有表的系統管理權限才能執行該語句。
- 該SQL命令僅支援在LIST分區表和RANGE分區表中使用,不支援在HASH分區表中使用。
- 如果表中已經建立索引,將在新分區中也建立該索引。
文法
ALTER TABLE table_name MERGE PARTITIONS
partition_name , partition_name
INTO PARTITION new_part [TABLESPACE tablespace_name] ;
參數
參數 | 說明 |
table_name | 分區表的名稱,可指定Schema。 |
partition_name | 需要合并的兩個分區名稱,以英文逗號(,)分隔。 |
new_part | 合并後新分區的名稱。 分區名稱在所有分區和子分區中必須唯一。 |
tablespace_name | 指定新分區將駐留的資料表空間。 如果未指定資料表空間,則新分區將建立在預設資料表空間中。 |
樣本
建立一個名為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')
);
INSERT INTO sales VALUES
(10, '4519b', 'FRANCE', '17-Jan-2012', '45000'),
(20, '3788a', 'INDIA', '01-Mar-2012', '75000'),
(40, '9519b', 'US', '12-Apr-2012', '145000'),
(20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500'),
(40, '4577b', 'US', '11-Nov-2012', '25000'),
(30, '7588b', 'CANADA', '14-Dec-2012', '50000'),
(30, '9519b', 'CANADA', '01-Feb-2012', '75000'),
(30, '4519b', 'CANADA', '08-Apr-2012', '120000'),
(40, '3788a', 'US', '12-May-2012', '4950'),
(10, '9519b', 'ITALY', '07-Jul-2012', '15000'),
(10, '9519a', 'FRANCE', '18-Aug-2012', '650000'),
(10, '9519b', 'FRANCE', '18-Aug-2012', '650000'),
(20, '3788b', 'INDIA', '21-Sept-2012', '5090'),
(40, '4788a', 'US', '23-Sept-2012', '4950'),
(40, '4788b', 'US', '09-Oct-2012', '15000'),
(20, '4519a', 'INDIA', '18-Oct-2012', '650000'),
(20, '4519b', 'INDIA', '2-Dec-2012', '5090');
將americas
分區拆分成us
和canada
兩個分區,樣本如下:
ALTER TABLE sales SPLIT PARTITION americas
VALUES ('US')
INTO (PARTITION us, PARTITION canada);
將us
分區和canada
分區合并到一個新分區new_americas
,樣本如下:
ALTER TABLE sales MERGE PARTITIONS us, canada
INTO PARTITION new_americas;