#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
обычного разбиения