子分区模板用于快速定义子分区,简化子分区的规范。您只需在子分区模板中定义一次子分区描述符,然后将该子分区模板应用于表中的每个分区,从而快速批量地为表中的分区定义子分区描述符。
注意事项
- 如果分区未指定子分区描述符,系统将默认使用子分区模板来定义子分区。
- 如果分区已指定子分区描述符,系统将默认使用该描述符定义子分区。
- 如果分区未指定子分区描述符,也没有提供子分区模板,系统将默认将创建一个默认子分区。
- 如果在子分区模板中指定了子分区名称,则对于使用该模板创建的子分区,名称为“分区名称_子分区模板名称”。例如:分区的名字为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;