#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');
Комментариев нет:
Отправить комментарий