Как автоматически создавать подразделы LIST в основной раздел RANGE - PullRequest
0 голосов
/ 24 октября 2019

У меня есть таблица с разделом RANGE на дату и подразделом LIST, как указано ниже.

CREATE TABLE REC_XXX_DATA 
( 
    XXX_ID VARCHAR2(8), 
    TEMPLATE_ID VARCHAR2(20), 
    XXX_DATE DATE 
) 
partition by RANGE(XXX_DATE) INTERVAL (numtodsinterval(7, 'DAY')) 
subpartition by list(XXX_ID)
(
partition OCT2619 values less than (TO_DATE(' 2019-10-26 23:59:59', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
(
   subpartition T360_OCT2619 values('AAA'),
   subpartition ABMC_OCT2619 values('BBB')    
) 
);

Я вставляю данные 27 октября 2019 года в столбец XXX_DATE. Затем в раздел добавляется новый раздел RANGE. таблица и ее подраздел также добавляются со значением списка как DEFAULT. Следовательно, все данные перемещаются в один и тот же подраздел.

Мое требование - автоматически создавать подразделы с фактическими значениями XXX_ID, которые мы вставляем.

Пожалуйста, предложите.

1 Ответ

0 голосов
/ 29 октября 2019

Нет. Разделы автоматического списка не поддерживаются на уровне подразделов до 12cR2. Я не знаю о более высоких версиях.

Если вы уже знаете различные значения столбца XXX_ID и если новые значения редко встречаются для XXX_ID, вы можете создать шаблон подраздела, оставив раздел по умолчанию для новых значений.

CREATE TABLE REC_XXX_DATA 
( 
    XXX_ID VARCHAR2(8), 
    TEMPLATE_ID VARCHAR2(20), 
    XXX_DATE DATE 
) 
partition by RANGE(XXX_DATE) INTERVAL (numtodsinterval(7, 'DAY')) 
subpartition by list(XXX_ID)
subpartition template
(subpartition AAA values('AAA'),
 subpartition BBB values('BBB'),
 subpartition XXX values(DEFAULT))
(
 partition OCT2619 values less than (TO_DATE(' 2019-10-26 23:59:59', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
 (
   subpartition AAA values('AAA'),
   subpartition BBB values('BBB'),
   subpartition XXX values(DEFAULT)
 ) 
);

insert into REC_XXX_DATA values('AAA','T1',to_date('27-oct-19','dd-mon-yy'));

select table_name, partition_name, subpartition_name, high_value 
  from user_tab_subpartitions 
 where table_name = 'REC_XXX_DATA' order by 1,2,3;

Выход:

TABLE_NAME    PARTITION_NAME SUBPARTITION_NAME HIGH_VALUE
REC_XXX_DATA  OCT2619        AAA               'AAA'
REC_XXX_DATA  OCT2619        BBB               'BBB'
REC_XXX_DATA  OCT2619        XXX               DEFAULT
REC_XXX_DATA  SYS_P197962    SYS_SUBP197959    'AAA'
REC_XXX_DATA  SYS_P197962    SYS_SUBP197960    'BBB'
REC_XXX_DATA  SYS_P197962    SYS_SUBP197961    DEFAULT

select count(1) from REC_XXX_DATA subpartition(SYS_SUBP197959);--1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...