आप इस तरह से कोशिश कर सकते हैं:स्वचालित विभाजन बनाने के लिए ओरेकल को बताने के लिए इंटरवल का उपयोग करें। आपको कॉलम (संख्या या तिथि) और एक अंतराल (मेरे उदाहरण 1 महीने में) परिभाषित करना होगा। ओरेकल एक ही विभाजन में सभी पंक्तियों को एक ही अंतराल में रखेगा (इस मामले में एक ही महीने में)। यदि विभाजन मौजूद नहीं है तो बनाया जाएगा।
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 विभाजन देखेंगे।
अब मैंने इसका परीक्षण कर लिया है!