раздел диапазона oracle в столбце с меткой времени

#sql #oracle #database-partitioning

#sql #Oracle #разбиение базы данных

Вопрос:

Это то, что я написал, чтобы создать таблицу с ежедневным разделением в поле createTime

 create table T_ASYNCFCMNOTIFICATION (
    C_ID NUMBER(34, 0) not null,
    C_CREATETIME timestamp not null,
    C_DEVICETOKEN varchar2(255 char),
    F_DATA NUMBER(34, 0),
    primary key (C_ID)
)
   PARTITION BY RANGE (C_CREATETIME)
INTERVAL(NUMTOYMINTERVAL(1, 'day'))
(
 PARTITION T_ASYNCFCMNOTIFICATION_P1 VALUES LESS THAN (TO_DATE('01-11-2020', 'DD-MM-YYYY'))
 );
 

но когда я запускаю свой запрос, я получаю эту ошибку :

Отчет об ошибке — ORA-14752: выражение интервала не является константой правильного типа 14752. 00000 — «Выражение интервала не является константой правильного типа» * Причина: вы пытались использовать либо непостоянный интервал, либо интервал, тип данных которого не соответствует столбцу разбиения * Действие:Используйте только постоянные выражения для интервала. Если тип данных столбца секционирования числовой, интервал должен быть числовой константой. Если тип данных имеет тип дата / время, интервал должен быть константой типа интервал

Ответ №1:

Используйте интервал NUMTODSINTERVAL(1, 'day') для ежедневного разбиения

это работает нормально

 ....
PARTITION BY RANGE (C_CREATETIME)
INTERVAL(NUMTODSINTERVAL(1, 'day'))
(
 PARTITION T_ASYNCFCMNOTIFICATION_P1 VALUES LESS THAN (TO_DATE('01-11-2020', 'DD-MM-YYYY'))
 );
 

Интервал NUMTOYMINTERVAL используется для YEAR MONTH обычного разбиения