我正在尝试创建一个表并按范围对其进行分区,然后按哈希进行子分区。但是我收到了一个错误。我怀疑剧本中有什么问题。当我们进行范围分区时,我们可以为哈希指定不同数量的子分区,如下例所示(分区OTHER_1有三个子分区,而所有其他分区有两个)。
CREATE TABLE ACCOUNTHOLDER_P (id INT, purchased DATE, OBJECT_TYPE VARCHAR2(50), PHONE_NUMBER VARCHAR2(50))
PARTITION BY RANGE (OBJECT_TYPE)
SUBPARTITION BY HASH(PHONE_NUMBER) (
PARTITION PARTNER_1 VALUES LESS THAN ('||''''||'Partner%'||''''||') TABLESPACE USERS (
SUBPARTITION sp1 TABLESPACE ABC,
SUBPARTITION sp2 TABLESPACE ABC
),
PARTITION CONSUMER_1 VALUES LESS THAN ('||''''||'User%'||''''||') TABLESPACE USERS (
SUBPARTITION sp3 TABLESPACE XYZ,
SUBPARTITION sp4 TABLESPACE XYZ
),
PARTITION OTHER_1 VALUES LESS THAN (MAXVALUE) TABLESPACE USERS (
SUBPARTITION sp5 TABLESPACE KLM,
SUBPARTITION sp6 TABLESPACE KLM,
SUBPARTITION sp7 TABLESPACE KLM
));
PARTITION PARTNER_1 VALUES LESS THAN ('||''''||'Partner%'||''''||') TABLESPACE USERS (
SUBPARTITION sp1 TABLESPACE ABC,
SUBPARTITION sp2 TABLESPACE ABC
),
PARTITION CONSUMER_1 VALUES LESS THAN ('||''''||'User%'||''''||') TABLESPACE USERS (
SUBPARTITION sp3 TABLESPACE XYZ,
SUBPARTITION sp4 TABLESPACE XYZ
),
PARTITION OTHER_1 VALUES LESS THAN (MAXVALUE) TABLESPACE USERS (
SUBPARTITION sp5 TABLESPACE KLM,
SUBPARTITION sp6 TABLESPACE KLM,
SUBPARTITION sp7 TABLESPACE KLM
));
错误:
感谢
此致
时代
答案 0 :(得分:3)
...琐碎
KLM,
^ that's the problem
评论后更新:
检查那些单引号。不清楚您是否希望它们属于您的分区值,也是百分号。也许不是
PARTITION PARTNER_1 VALUES LESS THAN ('||''''||'Partner%'||''''||')
这将完全符合您的要求:
PARTITION PARTNER_1 VALUES LESS THAN ('Partner')
第二次评论后更新:
我只能猜测你可能正在寻找类似的东西:
select '||'''||'User%'||'''||' from dual;
||'User%'||
但是,将其用作分区值是没有意义的。请解释一下你想要完成的任务。
答案 1 :(得分:3)
散列分区和子分区应始终具有2 - 2,4,8,16,32等的幂 - 或者最终它们之间的行分布不均匀。
除此之外,文档中有一个示例说明如何指定哈希子分区的数量 - http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin001.htm#i1006565
但是,我无法想象你为什么要这样做。散列分区对于提高大型等值连接的性能很有用,但是当连接表具有相同数量的散列分区/子分区时,这是最有效的。