创建模板化二级分区表
Oracle 模式下,创建模板化二级分区表的 SQL 语法如下:
CREATE TABLE [IF NOT EXISTS] table_name(column_option_list) partition_option_list; column_option_list: column_name column_type [, column_name column_type] partition_option: PARTITION BY RANGE(column_name){subpartition_option} (range_partition_list) | LIST(expression){subpartition_option} (list_partition_list) | HASH(expression){subpartition_option} { (hash_partition_list) | PARTITIONS partition_count } subpartition_option: SUBPARTITION BY RANGE(column_name) SUBPARTITION TEMPLATE(range_subpartition_list) | LIST(expression) SUBPARTITION TEMPLATE(list_subpartition_list) | HASH(expression) { SUBPARTITION TEMPLATE (hash_subpartition_list) | SUBPARTITIONS subpartition_count } range_partition_list: range_partition [, range_partition ...] range_partition: PARTITION partition_name VALUES LESS THAN {(expression_list) | MAXVALUE} range_subpartition_list: range_subpartition [, range_subpartition ...] range_subpartition: SUBPARTITION subpartition_name VALUES LESS THAN {(expression_list) | MAXVALUE} list_partition_list: list_partition [, list_partition ...] list_partition: PARTITION partition_name VALUES {(expression_list) | DEFAULT} list_subpartition_list: list_subpartition [, list_subpartition ...] list_subpartition: SUBPARTITION subpartition_name VALUES {(expression_list) | DEFAULT} hash_partition_list: hash_partition [, hash_partition ...] hash_partition: PARTITION partition_name hash_subpartition_list: hash_subpartition [, hash_subpartition ...] hash_subpartition: SUBPARTITION subpartition_name expression_list: expression [, expression ...] column_name_list: column_name [, column_name ...] partition_count | subpartition_count: INT_VALUE
复制
说明
模板化二级分区表的每个一级分区下的二级分区都按照模板中的二级分区定义,即每个一级分区下的二级分区的定义均相同。
对于模板化二级分区表来说,二级分区的命名规则为
($part_name)s($subpart_name)
。
例如:对于下⾯的 t_range_range
表,p0
下的 3 个二级分区的分区名分别为 p0smp1
、p0smp2
、p0smp3
。
obclient> CREATE TABLE t_range_range(col1 INT,col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp1 VALUES LESS THAN(100), SUBPARTITION mp2 VALUES LESS THAN(200), SUBPARTITION mp3 VALUES LESS THAN(300) ) (PARTITION p0 VALUES LESS THAN(2020), PARTITION p1 VALUES LESS THAN(2021), PARTITION p2 VALUES LESS THAN(2022) ); Query OK, 0 rows affected obclient> SELECT table_name,partition_name,subpartition_name FROM USER_TAB_SUBPARTITIONS; +---------------+----------------+-------------------+ | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | +---------------+----------------+-------------------+ | T_RANGE_RANGE | P0 | P0SMP1 | | T_RANGE_RANGE | P0 | P0SMP2 | | T_RANGE_RANGE | P0 | P0SMP3 | | T_RANGE_RANGE | P1 | P1SMP1 | | T_RANGE_RANGE | P1 | P1SMP2 | | T_RANGE_RANGE | P1 | P1SMP3 | | T_RANGE_RANGE | P2 | P2SMP1 | | T_RANGE_RANGE | P2 | P2SMP2 | | T_RANGE_RANGE | P2 | P2SMP3 | +---------------+----------------+-------------------+ 9 rows in set
复制
部分参数说明如下表所示。
参数 | 说明 |
---|---|
table_name | 指定表名。 |
column_name | 指定列名。 |
column_type | 指定列数据类型。 |
partition_name | 指定一级分区的名称。 |
subpartition_name | 指定二级分区的名称。 |
INT_VALUE | 指定 Hash 类型的二级分区的个数。 |
创建 Range + Range 分区的模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_m_rr(col1 INT,col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES LESS THAN(2020), SUBPARTITION mp1 VALUES LESS THAN(2021), SUBPARTITION mp2 VALUES LESS THAN(2022) ) (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200) ); Query OK, 0 rows affected
复制
创建 Range + List 分区的模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_m_rl(col1 INT,col2 VARCHAR2(50)) PARTITION BY RANGE(col1) SUBPARTITION BY LIST(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES('01'), SUBPARTITION mp1 VALUES('02'), SUBPARTITION mp2 VALUES('03') ) (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200) ); Query OK, 0 rows affected
复制
创建 Range + Hash 分区的模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_m_rh(col1 INT,col2 VARCHAR2(50)) PARTITION BY RANGE(col1) SUBPARTITION BY HASH(col2) SUBPARTITIONS 5 (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200) ); Query OK, 0 rows affected
复制
创建 List + Range 分区的模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_m_lr(col1 INT,col2 varchar2(50)) PARTITION BY LIST(col2) SUBPARTITION BY RANGE(col1) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES LESS THAN(100), SUBPARTITION mp1 VALUES LESS THAN(200), SUBPARTITION mp2 VALUES LESS THAN(300) ) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') ); Query OK, 0 rows affected
复制
创建 List + List 分区的模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_m_ll(col1 INT,col2 varchar2(50)) PARTITION BY LIST(col1) SUBPARTITION BY LIST(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES('A'), SUBPARTITION mp1 VALUES('B'), SUBPARTITION mp2 VALUES('C') ) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') ); Query OK, 0 rows affected
复制
创建 List + Hash 分区的模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_m_lh(col1 INT,col2 VARCHAR2(50)) PARTITION BY LIST(col1) SUBPARTITION BY HASH(col2) SUBPARTITIONS 5 (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') ); Query OK, 0 rows affected
复制
创建 Hash + Range 分区的模板化二级分区表
示例如下:
obclient> CREATE TABLE tbl2_m_hr(col1 INT,col2 INT,col3 INT) PARTITION BY HASH(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE (SUBPARTITION sp0 VALUES LESS THAN(100), SUBPARTITION sp1 VALUES LESS THAN(200), SUBPARTITION sp2 VALUES LESS THAN(300) ) PARTITIONS 5; Query OK, 0 rows affected
复制
创建 Hash + List 分区的模板化二级分区表
示例如下:
obclient> CREATE TABLE tbl2_m_hl(col1 INT,col2 INT,col3 INT) PARTITION BY HASH(col1) SUBPARTITION BY LIST(col2) SUBPARTITION TEMPLATE (SUBPARTITION sp0 VALUES(100), SUBPARTITION sp1 VALUES(200), SUBPARTITION sp2 VALUES(300) ) PARTITIONS 5; Query OK, 0 rows affected
复制
创建 Hash +Hash 分区的模板化二级分区表
示例如下:
obclient> CREATE TABLE tbl2_m_hh(col1 INT,col2 INT,col3 INT) PARTITION BY HASH(col1) SUBPARTITION BY HASH(col2) SUBPARTITIONS 3 PARTITIONS 5; Query OK, 0 rows affected
复制
创建非模板化二级分区表
Oracle 模式下,创建非模板化二级分区表的 SQL 语法如下:
CREATE TABLE [IF NOT EXISTS] table_name(column_option_list) partition_option_list; column_option_list: column_name column_type [, column_name column_type] partition_option_list: PARTITION BY RANGE(column_name){subpartition_option} { range_partition_option (subpartition_option_list) [, range_partition_option (subpartition_option_list) ...] } | LIST(expression){subpartition_option} { list_partition_option (subpartition_option_list) [, list_partition_option (subpartition_option_list) ...] } | HASH(expression) {subpartition_option} { hash_partition_option (subpartition_option_list) [, hash_partition_option (subpartition_option_list) ...] } subpartition_option: SUBPARTITION BY { RANGE(column_name) | LIST(expression) | HASH(expression) } subpartition_option_list: range_partition_option_list | list_partition_option_list | hash_partition_option_list range_partition_option_list: range_partition_option [, range_partition_option ...] list_partition_option_list: list_partition_option [, list_partition_option ...] hash_partition_option_list: hash_partition_option [, hash_partition_option ...] range_partition_option: SUBPARTITION subpartition_name VALUES LESS THAN range_partition_expr [,SUBPARTITION subpartition_name VALUES LESS THAN range_partition_expr ...] list_partition_option: SUBPARTITION subpartition_name VALUES list_partition_expr [, SUBPARTITION subpartition_name VALUES list_partition_expr ...] hash_partition_option_list: SUBPARTITION subpartition_name [, SUBPARTITION subpartition_name ...]
复制
说明
非模板化二级分区表的每个一级分区下的二级分区均可以自由定义,即每个一级分区下的二级分区的定义可以相同也可以不同。
部分参数说明如下表所示。
参数 | 说明 |
---|---|
table_name | 指定表名。 |
column_name | 指定列名。 |
column_type | 指定列数据类型。 |
partition_name | 指定一级分区的名称。 |
subpartition_name | 指定二级分区的名称。 |
创建 Range + Range 分区的非模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_f_rr(col1 INT,col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) (PARTITION p0 VALUES LESS THAN(100) (SUBPARTITION sp0 VALUES LESS THAN(2020), SUBPARTITION sp1 VALUES LESS THAN(2021) ), PARTITION p1 VALUES LESS THAN(200) (SUBPARTITION sp2 VALUES LESS THAN(2020), SUBPARTITION sp3 VALUES LESS THAN(2021), SUBPARTITION sp4 VALUES LESS THAN(2022) ) ); Query OK, 0 rows affected
复制
创建 Range + List 分区的非模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_f_rl(col1 INT,col2 VARCHAR2(50)) PARTITION BY RANGE(col1) SUBPARTITION BY LIST(col2) (PARTITION p0 VALUES LESS THAN(100) (SUBPARTITION sp0 VALUES('01'), SUBPARTITION sp1 VALUES('02') ), PARTITION p1 VALUES LESS THAN(200) (SUBPARTITION sp2 VALUES('01'), SUBPARTITION sp3 VALUES('02'), SUBPARTITION sp4 VALUES('03') ) ); Query OK, 0 rows affected
复制
创建 Range + Hash 分区的非模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_f_rh(col1 INT,col2 VARCHAR2(50)) PARTITION BY RANGE(col1) SUBPARTITION BY HASH(col2) (PARTITION p0 VALUES LESS THAN(100) (SUBPARTITION sp0, SUBPARTITION sp1 ), PARTITION p1 VALUES LESS THAN(200) (SUBPARTITION sp2, SUBPARTITION sp3, SUBPARTITION sp4 ) ); Query OK, 0 rows affected
复制
创建 List + Range 分区的非模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_f_lr(col1 INT,col2 VARCHAR2(50)) PARTITION BY LIST(col2) SUBPARTITION BY RANGE(col1) (PARTITION p0 VALUES('01') (SUBPARTITION sp0 VALUES LESS THAN(100), SUBPARTITION sp1 VALUES LESS THAN(200) ), PARTITION p1 VALUES('02') (SUBPARTITION sp2 VALUES LESS THAN(100), SUBPARTITION sp3 VALUES LESS THAN(200), SUBPARTITION sp4 VALUES LESS THAN(300) ) ); Query OK, 0 rows affected
复制
创建 List + List 分区的非模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_f_ll(col1 INT,col2 varchar2(50)) PARTITION BY LIST(col1) SUBPARTITION BY LIST(col2) (PARTITION p0 VALUES ('01', '02') (SUBPARTITION sp0 VALUES ('A'), SUBPARTITION sp1 VALUES ('B'), SUBPARTITION sp2 VALUES ('C') ) , PARTITION p1 VALUES ('03', '04') (SUBPARTITION sp3 VALUES ('A'), SUBPARTITION sp4 VALUES ('B'), SUBPARTITION sp5 VALUES ('C') ) ); Query OK, 0 rows affected
复制
创建 List +Hash 分区的非模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_f_lh(col1 INT,col2 VARCHAR2(50)) PARTITION BY LIST(col1) SUBPARTITION BY HASH(col2) (PARTITION p0 VALUES('01') (SUBPARTITION sp0, SUBPARTITION sp1 ), PARTITION p1 VALUES('02') (SUBPARTITION sp2, SUBPARTITION sp3, SUBPARTITION sp4 ) ); Query OK, 0 rows affected
复制
创建 Hash + Range 分区的非模板化二级分区表
示例如下:
obclient> CREATE TABLE tbl2_f_hr(col1 INT,col2 INT,col3 INT) PARTITION BY HASH(col1) SUBPARTITION BY RANGE(col2) (PARTITION p0 (SUBPARTITION sp0 VALUES LESS THAN(100), SUBPARTITION sp1 VALUES LESS THAN(200)), PARTITION p1 (SUBPARTITION sp2 VALUES LESS THAN(100), SUBPARTITION sp3 VALUES LESS THAN(200) ) ); Query OK, 0 rows affected
复制
创建 Hash + List 分区的非模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_f_hl(col1 INT,col2 INT,col3 INT) PARTITION BY HASH(col1) SUBPARTITION BY LIST(col2) (PARTITION p0 (SUBPARTITION sp0 VALUES(1,3), SUBPARTITION sp1 VALUES(4,7) ), PARTITION p1 (SUBPARTITION sp2 VALUES(1,3), SUBPARTITION sp3 VALUES(4,7) ) ); Query OK, 0 rows affected
复制
创建 Hash + Hash 分区的非模板化二级分区表
示例如下:
obclient> CREATE TABLE t2_f_hh(col1 INT,col2 INT,col3 INT) PARTITION BY HASH(col1) SUBPARTITION BY HASH(col2) (PARTITION p0 (SUBPARTITION sp0, SUBPARTITION sp1 ), PARTITION p1 (SUBPARTITION sp2, SUBPARTITION sp3 ) ); Query OK, 0 rows affected
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月国产数据库大事记:4个千万级中标项目诞生!2024年达梦净利3.6亿、金仓净利8006.6万……
墨天轮编辑部
2166次阅读
2025-04-30 17:39:54
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
767次阅读
2025-04-18 14:18:38
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
751次阅读
2025-04-30 15:24:06
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
649次阅读
2025-04-15 17:24:06
2025年5月中国数据库流行度排行榜:OB一枝独秀破 800,金仓奋起直追跻四强
墨天轮编辑部
604次阅读
2025-05-13 10:55:54
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
575次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
527次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
521次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
499次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
484次阅读
2025-04-30 12:17:56