Можете да опитате по този начин:използвайте INTERVAL, за да кажете на oracle да създава автоматични дялове. Трябва да определите колона (номер или дата) и интервал (в моя пример 1 месец). Oracle ще постави в същия дял всички редове в същия интервал (в този случай в същия месец). Ако дялът не съществува, ще бъде създаден.
create table log(
id_dispositive number,
date date,
status number,
type number
)
partition by range (date)
interval (numtoyminterval(1,'MONTH'))(
partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);
Същото може да се направи и с колона тип. Повече информация:http://www.oracle.com/ technetwork/articles/sql/11g-partitioning-084209.html .
Всеки дял може да бъде подразделен с помощта на ключ TEMPLATE.
create table log(
id_dispositive number,
date date,
status number,
type number
)
partition by range (date) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)
subpartition TEMPLATE (
SUBPARTITION types1 VALUES (1, 2) TABLESPACE tbs_1,
SUBPARTITION types2 VALUES (3, 4) TABLESPACE tbs_1
)
(
partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);
В този случай не можете да създадете автоматичен подраздел, ако ще бъде добавен нов тип, трябва да изпълните команда за промяна на таблица. Ето повече информация; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655 .
Във вашия пример:
create table prova_log(
id_dispositive number,
type number,
date_verification date,
status number
)
partition by range (date_verification) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)
subpartition TEMPLATE (
SUBPARTITION type1 VALUES (1),
SUBPARTITION type2 VALUES (2),
SUBPARTITION type3 VALUES (3),
SUBPARTITION type4 VALUES (4)
)
(
partition p0816 values less than (to_date('01/09/2016','dd/mm/yyyy'))
);
Ако се опитате да вмъкнете:
insert into prova_log values (1,1,TO_DATE('10/10/2016','dd/mm/yyyy'),1);
ще видите 2 дяла на вашата маса.
Сега го тествах!