子分區模板用於快速定義子分區,簡化子分區的規範。您只需在子分區模板中定義一次子分區描述符,然後將該子分區模板應用於表中的每個分區,從而快速批量地為表中的分區定義子分區描述符。
注意事項
- 如果分區未指定子分區描述符,系統將預設使用子分區模板來定義子分區。
- 如果分區已指定子分區描述符,系統將預設使用該描述符定義子分區。
- 如果分區未指定子分區描述符,也沒有提供子分區模板,系統將預設將建立一個預設子分區。
- 如果在子分區模板中指定了子分區名稱,則對於使用該模板建立的子分區,名稱為“分區名稱_子分區模板名稱”。例如:分區的名字為parta,子分區模板的名字為subpartb,拼接後產生的子分區名為parta_subpartb。
文法
- 建立子分區模板1(通用文法)
CREATE TABLE table_definition PARTITION BY hash/range/list (column[, column ]...) SUBPARTITION BY hash/range/list (column[, column ]...) SUBPARTITION TEMPLATE (subpartition[, subpartition], ...) (table_partition[, table_partition]...);
- 建立子分區模板2(僅適用於子分區是HASH分區類型的情況)
CREATE TABLE table_definition PARTITION BY hash/range/list (column[, column ]...) SUBPARTITION BY hash(column[, column ]...) SUBPARTITION TEMPLATE num (table_partition[, table_partition]...);
- 建立子分區模板3(僅適用於分區和子分區都是HASH分區類型的情況)
CREATE TABLE table_definition PARTITION BY hash (column[, column ]...) SUBPARTITION BY hash(column[, column ]...) PARTITIONS num SUBPARTITIONS num;
- 修改子分區模板1(通用文法)
ALTER TABLE table_definition SUBPARTITION TEMPLATE (subpartition[, subpartition], ...)
- 修改子分區模板2 (僅適用於子分區是HASH分區類型的情況)
ALTER TABLE table_definition SUBPARTITION TEMPLATE number
- 刪除子分區模板
ALTER TABLE table_definition SUBPARTITION TEMPLATE ()
樣本
- 建立子分區模板1(通用文法)
CREATE TABLE shipments ( order_id NUMBER NOT NULL, order_date DATE NOT NULL, delivery_date DATE NOT NULL, customer_id NUMBER NOT NULL, sales_amount NUMBER NOT NULL ) PARTITION BY RANGE (order_date) SUBPARTITION BY RANGE(delivery_date) SUBPARTITION TEMPLATE (SUBPARTITION e VALUES LESS THAN (TO_DATE('15-AUG-2006','dd-MON-yyyy')), SUBPARTITION a VALUES LESS THAN (TO_DATE('01-SEP-2006','dd-MON-yyyy')), SUBPARTITION l VALUES LESS THAN (MAXVALUE) ) ( PARTITION p_2006_jul VALUES LESS THAN (TO_DATE('01-AUG-2006','dd-MON-yyyy')), PARTITION p_2006_aug VALUES LESS THAN (TO_DATE('01-SEP-2006','dd-MON-yyyy')), PARTITION p_2006_sep VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy')), PARTITION p_2006_oct VALUES LESS THAN (TO_DATE('01-NOV-2006','dd-MON-yyyy')), PARTITION p_2006_nov VALUES LESS THAN (TO_DATE('01-DEC-2006','dd-MON-yyyy')), PARTITION p_2006_dec VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy')) );
- 建立子分區模板2(僅適用於子分區是HASH分區類型的情況)
CREATE TABLE emp_sub_template (deptno NUMBER, empname VARCHAR(32), grade NUMBER) PARTITION BY RANGE(deptno) SUBPARTITION BY HASH(empname) SUBPARTITION TEMPLATE 4 (PARTITION p1 VALUES LESS THAN (1000), PARTITION p2 VALUES LESS THAN (2000), PARTITION p3 VALUES LESS THAN (6000) );
- 建立子分區模板3 (僅適用於分區和子分區都是HASH分區類型的情況)
CREATE TABLE hash_sub_template (deptno NUMBER, empname VARCHAR(32), grade NUMBER) PARTITION BY HASH(deptno) SUBPARTITION BY HASH(empname) PARTITIONS 4 SUBPARTITIONS 3;
- 修改子分區模板1(通用文法)
ALTER TABLE hash_sub_template SET SUBPARTITION TEMPLATE (SUBPARTITION a1, SUBPARTITION b1, SUBPARTITION c1, SUBPARTITION d1);
- 修改子分區模板2 (僅適用於子分區是HASH分區類型的情況)
ALTER TABLE hash_sub_template SET SUBPARTITION TEMPLATE 3;