Доброго всем дня, имеется вот такая вот таблица
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');
Комментариев нет:
Отправить комментарий