ORACLE中无法使用ALTER TABLE按范围分区

问题描述 投票:0回答:1

我有一个名为category_的属性,我想在该属性上对名为unicode的表进行分区。这是代码:

alter table unicode (
    partition by range (category_) (
        partition p0 values less than ('Cc'),
        partition p1 values less than ('Cf'),
        partition p2 values less than ('Co'),
        partition p3 values less than ('Cs'),
        partition p4 values less than ('Ll'),
        partition p5 values less than ('Lm'),
        partition p6 values less than ('Lo'),
        partition p7 values less than ('Lt'),
        partition p8 values less than ('Lu'),
        partition default_ values less than (MAXVALUE)
)
); 

这不起作用,引用“01735.00000 - 无效的 ALTER TABLE 选项”。我在 ORACLE 文档中找不到任何有用的东西。

这是表格方案:

create table unicode (
  codepoint nvarchar2(6) PRIMARY KEY,
  charname  nvarchar2(100) NOT NULL,
  category_ nchar(2) NOT NULL,
  combining number NOT NULL,
  bidi nvarchar2(3) NOT NULL,
  decomposition nvarchar2(100),
  decimal_ number,
  digit number,
  numeric_ nvarchar2(100),
  mirrored nchar(1) NOT NULL,
  oldname nvarchar2(100),
  comment_ nvarchar2(100),
  uppercase nvarchar2(6), 
  lowercase nvarchar2(6),
  titlecase nvarchar2(6),
  CONSTRAINT fk_upper FOREIGN KEY (uppercase) REFERENCES unicode(codepoint),
  CONSTRAINT fk_lower FOREIGN KEY (lowercase) REFERENCES unicode(codepoint),
  CONSTRAINT fk_title FOREIGN KEY (titlecase) REFERENCES unicode(codepoint)
)

我想做的是根据category_的每个值对该数据库进行分区,因为它们很少。如果有更简单的方法,将不胜感激。

编辑:当我添加分区时,我又遇到了我在测试期间看到的另一个错误:

alter table unicode add 
    partition p0 values ('Cc'),
    partition p1 values ('Cf'),
    partition p2 values ('Co'),
    partition p3 values ('Cs'),
    partition p4 values ('Ll'),
    partition p5 values ('Lm'),
    partition p6 values ('Lo'),
    partition p7 values ('Lt'),
    partition p8 values ('Lu') // we could continue for every category
;

错误是:“14020.00000 - “不能为表分区指定此物理属性”

*原因:解析物理时遇到意外选项 表分区的属性; Range 或的有效选项 复合范围分区有 INITRANS、MAXTRANS、TABLESPACE、 存储、PCTFREE 和 PCTUSED;只能指定 TABLESPACE 对于哈希分区

*操作:从物理属性列表中删除无效选项 表分区的

*评论:此错误可能是由于遗漏了 列表后面的终止(右)括号 分区说明”

sql oracle oracle-sqldeveloper
1个回答
1
投票

@诺兰·博耶尔,

我更改了语法,在您的查询中添加了关键字“MODIFY”。

ALTER TABLE unicode MODIFY 
    PARTITION BY RANGE (category_) (
        PARTITION p0 VALUES LESS THAN ('Cc'),
        PARTITION p1 VALUES LESS THAN ('Cf'),
        PARTITION p2 VALUES LESS THAN ('Co'),
        PARTITION p3 VALUES LESS THAN ('Cs'),
        PARTITION p4 VALUES LESS THAN ('Ll'),
        PARTITION p5 VALUES LESS THAN ('Lm'),
        PARTITION p6 VALUES LESS THAN ('Lo'),
        PARTITION p7 VALUES LESS THAN ('Lt'),
        PARTITION p8 VALUES LESS THAN ('Lu'),
        PARTITION default_ VALUES LESS THAN (MAXVALUE)
); 

下面列出的分区是为给定的表创建的。

© www.soinside.com 2019 - 2024. All rights reserved.