oracle 如何使用小于的值分割此分区表而不获取ORA-00906

to94eoyn  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(172)

我想请你帮忙,我已经找了几天的例子,我还没有找到任何工作。
我在Oracle 11g中有一个分区表,这是它的最后两个分区。P2026和P_OTHER,dataType NUMBER(4)。此表没有任何带有日期类型的列

PARTITION "P2026"  VALUES LESS THAN (2027)
 ( SUBPARTITION "P2026_SP0"  VALUES (0) ,
  SUBPARTITION "P2026_SP1"  VALUES (1) ,
  SUBPARTITION "P2026_SP2"  VALUES (2) ,
  SUBPARTITION "P2026_SP3"  VALUES (3) ,
  SUBPARTITION "P2026_SP4"  VALUES (4) ,
  SUBPARTITION "P2026_SP5"  VALUES (5) ,
  SUBPARTITION "P2026_SP6"  VALUES (6) ,
  SUBPARTITION "P2026_SP7"  VALUES (7) ,
  SUBPARTITION "P2026_SP8"  VALUES (8) ,
  SUBPARTITION "P2026_SP9"  VALUES (9) ,
  SUBPARTITION "P2026_SP_OTHER"  VALUES (DEFAULT) ) ,
 PARTITION "P_OTHER"  VALUES LESS THAN (MAXVALUE)
 ( SUBPARTITION "P_OTHER_SP0"  VALUES (0) ,
  SUBPARTITION "P_OTHER_SP1"  VALUES (1) ,
  SUBPARTITION "P_OTHER_SP2"  VALUES (2) ,
  SUBPARTITION "P_OTHER_SP3"  VALUES (3) ,
  SUBPARTITION "P_OTHER_SP4"  VALUES (4) ,
  SUBPARTITION "P_OTHER_SP5"  VALUES (5) ,
  SUBPARTITION "P_OTHER_SP6"  VALUES (6) ,
  SUBPARTITION "P_OTHER_SP7"  VALUES (7) ,
  SUBPARTITION "P_OTHER_SP8"  VALUES (8) ,
  SUBPARTITION "P_OTHER_SP9"  VALUES (9) ,
  SUBPARTITION "P_OTHER_SP_OTHER"  VALUES (DEFAULT) ) ) ;

字符串
我想拆分P_OTHER以添加与代表2027年的数字相对应的分区
我试试这个:

ALTER TABLE "OWNER"."PARTITIONEDTABLE" SPLIT PARTITION P_OTHER VALUES LESS THAN (2028) 
 (SUBPARTITION "P2027_SP0"  VALUES (0) ,
  SUBPARTITION "P2027_SP1"  VALUES (1) ,
  SUBPARTITION "P2027_SP2"  VALUES (2) ,
  SUBPARTITION "P2027_SP3"  VALUES (3) ,
  SUBPARTITION "P2027_SP4"  VALUES (4) ,
  SUBPARTITION "P2027_SP5"  VALUES (5) ,
  SUBPARTITION "P2027_SP6"  VALUES (6) ,
  SUBPARTITION "P2027_SP7"  VALUES (7) ,
  SUBPARTITION "P2027_SP8"  VALUES (8) ,
  SUBPARTITION "P2027_SP9"  VALUES (9) ,
  SUBPARTITION "P2027_SP_OTHER" VALUES (DEFAULT)
  )
INTO (partition P2027, partition P_OTHER);


我得到了

ERROR at line 1:
ORA-00906: missing left parenthesis


我试着只做分区而不做子分区,以便以后添加它们,我也有同样的错误

ALTER TABLE "OWNER"."PARTITIONEDTABLE" SPLIT PARTITION P_OTHER VALUES LESS THAN (2028) INTO (partition P2027, partition P_OTHER);
ERROR at line 1:
ORA-00906: missing left parenthesis

的字符串
有人知道语法错误是什么吗?

qnzebej0

qnzebej01#

有时Oracle在解析SQL时的错误并不是很有用。在这种情况下,它不是关于丢失括号。
您需要使用AT子句,而不是VALUES LESS THAN。此外,拆分时不列出子分区。拆分分区的语法需要简单:

ALTER TABLE tmp1 SPLIT PARTITION "P_OTHER" AT (2028) INTO (PARTITION "P2027", PARTITION "P_OTHER")

字符串
如果你删除了P_OTHER分区,然后设置了(1)的间隔(因为你的 year 列显然是一个每年递增1的数字;对于真实的日期列,它将是(NUMTOYMINTERVAL(1,'YEAR'))),Oracle将在需要时自动添加新的年度分区,从而消除了昂贵的分割需求:

alter table tmp1 drop partition p_other;
alter table tmp1 set interval(1);


别再劈叉了!唯一的缺点是你会丢失漂亮的分区名(它们是系统生成的),但是因为你不需要做任何分区维护,所以这不是什么大问题(如果你需要编写一些特定于日期的分区工作,你可以使用新的FOR语法分区引用)。

相关问题