Страницы

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

пятница, 10 января 2020 г.

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

#sql #oracle #plsql #partition


Доброго всем дня, имеется вот такая вот таблица

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 (..) сразу теряюсь. Мой
первый вопрос, все замечания по вопросу приветствуются, дабы в дальнейшем не допускать
ошибок.
    


Ответы

Ответ 1



Как-то так: 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');

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

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