我正在使用Oracle 11g。
我有想要添加分区的大表。我的分区(和子分区)键列是INTERVAL RANGE PARTITION
类型。
我知道可以自动创建一个list partition
,但是我需要对VARCHAR2
做同样的事情。有没有一种方法可以使用create table t1 (name varchar2(30), company varchar2(10), value number);
类型(不代表任何日期)来做到这一点。
示例:
name
我希望每个新的v-for
都将有一个新分区。有没有一种方法,而无需编写特定的PL / SQL代码来检查是否需要新分区并进行创建呢?也许有一些图案或某种东西...
答案 0 :(得分:3)
自动列表分区为added in 12.2。因此,您需要升级才能执行此操作。
同时,您可以创建一个通用的默认分区。然后根据需要拆分出新值:
create table t (
c1 int
) partition by list ( c1 ) (
partition pdef values ( default )
);
select partition_name, high_value
from user_tab_partitions
where table_name = 'T';
PARTITION_NAME HIGH_VALUE
PDEF default
insert into t values ( 1 );
insert into t values ( 2 );
alter table t
split partition pdef
values ( 1 ) into (
partition p1, partition pdef
);
alter table t
split partition pdef
values ( 2 ) into (
partition p2, partition pdef
);
select partition_name, high_value
from user_tab_partitions
where table_name = 'T';
PARTITION_NAME HIGH_VALUE
P1 1
P2 2
PDEF default
当您到达12.2时,可以将其切换到自动列表。但是您需要先删除默认分区!
alter table t set partitioning automatic;
ORA-14852: SET [SUB]PARTITIONING AUTOMATIC is not legal on this table.
alter table t drop partition pdef;
alter table t set partitioning automatic;
insert into t values ( 3 );
select partition_name, high_value
from user_tab_partitions
where table_name = 'T';
PARTITION_NAME HIGH_VALUE
P1 1
P2 2
SYS_P5201 3