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