1

我正在尝试创建一个表并按范围对其进行分区,然后按哈希进行子分区。但我收到一个错误。我怀疑脚本中有什么问题。当我们进行范围分区时,我们可以为哈希指定不同数量的子分区,如下面的示例(分区 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
  ));

错误 :

SQL Error: ORA-00907: missing right parenthesis 00907. 00000 - "missing right parenthesis" *Cause:
*Action:

谢谢

问候,

时代

4

2 回答 2

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%'||

但是,将其用作分区值是没有意义的。请解释您要完成的工作。

于 2013-06-18T07:21:51.747 回答
3

哈希分区和子分区应该始终以 2 的幂为单位——2、4、8、16、32 等——否则最终会导致它们之间的行分布不均匀。

除此之外,文档中有一个示例说明如何指定哈希子分区的数量——http: //docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin001.htm#i1006565

不过,我无法想象你为什么要这样做。散列分区对于提高大型等值连接的性能很有用,但当连接表具有相同数量的散列分区/子分区时,这是最有效的。

于 2013-06-18T08:15:56.223 回答