Страницы

Поиск по вопросам

среда, 20 февраля 2019 г.

Oracle автоматическое секционирование по дате

Доброго всем дня, имеется вот такая вот таблица
CREATE TABLE test ( ID NUMBER(*) PRIMARY KEY NOT NULL, NAME VARCHAR2(40) NOT NULL, TEXT VARCHAR2(4000), DATE_CREATE DATE DEFAULT sysdate NOT NULL )
нужно сделать по ней автоматическое секционирование по столбцу DATE_CREATE, интервал в один день , что бы на следующий день автоматически создавалась новая партиция и следовательно в нее заносили данные за этот день, слышал что в 11g эту реализацию добавили, пытался разобраться, но как доходит до partition ... values less than (..) сразу теряюсь. Мой первый вопрос, все замечания по вопросу приветствуются, дабы в дальнейшем не допускать ошибок.


Ответ

Как-то так:
create table test(id number, date_create date default sysdate not null) partition by range (date_create) INTERVAL(NUMTODSINTERVAL(1,'DAY')) (PARTITION FIRST VALUES LESS THAN (TO_DATE('2016-11-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) );
PS в первую партицию (секцию) попадут все дни < 2016-11-30 00:00:00
Из доки
You must specify at least one range partition using the PARTITION clause.
UPDATE:
вместо select * from tab partition(p1); можно воспользоваться след. запросом, который должен прочитать только одну дневную партицию и вернуть из нее записи:
select * from test where date_create between to_date('2016-11-29','yyyy-mm-dd') and to_date('2016-11-30','yyyy-mm-dd');

Комментариев нет:

Отправить комментарий