Изменить значение диапазона в разделе таблицы

У меня есть большая таблица с разделами. бывший:

CREATE TABLE cust_order (
cust_id     NUMBER(10), 
start_date   VARCHAR2(25), 
amount_sold NUMBER(10,2))
PARTITION BY RANGE (START_DATE)
(  
PARTITION MAY VALUES LESS THAN ('20120601'),
PARTITION DEF VALUES LESS THAN(MAXVALUE));

Я хочу изменить таблицу так, чтобы раздел MAY содержал значения меньше «20120501», а данные от «20120501» до «20120601» хранились в разделе DEF.


person odew    schedule 19.04.2012    source источник


Ответы (1)


Во-первых, вы всегда должны хранить даты в столбцах DATE. Хранение дат в столбце VARCHAR2(25) — это рецепт проблем в будущем: кто-то неизбежно вставит строку в неожиданном формате.

Во-вторых, предполагая, что между разделами MAY и DEF нет разделов, вы можете разделить раздел MAY

ALTER TABLE cust_order
  SPLIT PARTITION may AT ('20120501')
   INTO( PARTITION may,
         PARTITION june_temp )
 UPDATE GLOBAL INDEXES;

а затем объединить разделы JUNE_TEMP и DEF

ALTER TABLE cust_order
  MERGE PARTITIONS june_temp, def
   INTO PARTITION  def

Однако я не уверен, что вижу мудрость в этом... Раздел по умолчанию обычно не должен хранить какие-либо данные - обычно он существует только для того, чтобы вставки не выдавали ошибку, если они имеют неожиданно большой ключ раздела. . Таким образом, перемещение данных, которые уже находятся в одном разделе, в раздел по умолчанию кажется довольно странным. Если в будущем вы просто собираетесь создать раздел JUNE, я не уверен, почему бы вам просто не разделить разделы на разделы MAY и JUNE.

person Justin Cave    schedule 19.04.2012
comment
Привет, Джастин, да для 1), но вот как это реализовано. Я хочу разделить раздел MAY, чтобы значения меньше 20120501 перешли в MAY, а те, которые больше не соответствуют этому разделу, перешли в DEF. - person odew; 20.04.2012
comment
@odew - Обновил ваш вопрос и мой ответ. - person Justin Cave; 20.04.2012