Bạn có thể thử theo cách này:sử dụng INTERVAL để nói với oracle để tạo phân vùng tự động. Bạn phải xác định cột (số hoặc ngày) và một khoảng thời gian (trong ví dụ của tôi là 1 tháng). Oracle sẽ đưa vào cùng một phân vùng tất cả các hàng trong cùng một khoảng thời gian (trong trường hợp này là trong cùng một tháng). Nếu phân vùng không tồn tại sẽ được tạo.
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'))
);
Điều tương tự cũng có thể được thực hiện với cột loại. Thông tin thêm: http://www.oracle.com/ technetwork / posts / sql / 11g-partitioning-084209.html .
Mọi phân vùng đều có thể được tạo phân vùng con bằng khóa 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'))
);
Trong trường hợp này, bạn không thể tạo một phân vùng con tự động, nếu một loại mới sẽ được thêm vào, bạn phải chạy một trạng thái bảng thay thế. Tại đây thêm thông tin; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655 .
Trong ví dụ của bạn:
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'))
);
Nếu bạn cố gắng chèn:
insert into prova_log values (1,1,TO_DATE('10/10/2016','dd/mm/yyyy'),1);
bạn sẽ thấy 2 phân vùng trên bảng của mình.
Bây giờ tôi đã thử nghiệm nó!