सबसे पहले, मैं यह बताना चाहता हूं कि ओरेकल में विभाजन एक उन्नत विषय है, इसलिए आप शुरुआत में सभी डीडीएल को मैन्युअल रूप से चलाना चाह सकते हैं, जब तक कि आप डीडीएल स्क्रिप्ट चलाने के साथ पर्याप्त आश्वस्त न हों। मैं आपको यह भी सलाह दूंगा कि बिना समझ दोनों के इंटरनेट पर मिलने वाली स्क्रिप्ट को कभी भी न चलाएं यह और परीक्षण यह पूरी तरह से, विशेष रूप से डीडीएल स्क्रिप्ट।
अब इस मामले के लिए, आप को क्वेरी कर सकते हैं। *_TAB_PARTITIONS
विभाजन सीमा को पुनः प्राप्त करने के लिए शब्दकोश दृश्य:
SQL> SELECT partition_name, high_value
2 FROM user_tab_partitions
3 WHERE table_name = 'TEST_TABLE';
PARTITION_NAME HIGH_VALUE
--------------- --------------------------------------------------------
PT01122012 TO_DATE(' 2012-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01022013 TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01042013 TO_DATE(' 2013-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01062013 TO_DATE(' 2013-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01082013 TO_DATE(' 2013-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
यह कॉलम LONG
. प्रकार का है (=पदावनत LOB) इसलिए हमारे पास SQL के साथ फ़िल्टर करने के लिए कुछ उपकरण हैं, हमें PL/SQL का उपयोग करना होगा।
SQL> BEGIN
2 FOR cc IN (SELECT partition_name, high_value --
3 FROM user_tab_partitions
4 WHERE table_name = 'TEST_TABLE') LOOP
5 EXECUTE IMMEDIATE
6 'BEGIN
7 IF sysdate >= ADD_MONTHS(' || cc.high_value || ', 2) THEN
8 EXECUTE IMMEDIATE
9 ''ALTER TABLE TEST_TABLE DROP PARTITION '
10 || cc.partition_name || '
11 '';
12 END IF;
13 END;';
14 END LOOP;
15 END;
16 /
PL/SQL procedure successfully completed
SQL> SELECT partition_name, high_value
2 FROM user_tab_partitions
3 WHERE table_name = 'TEST_TABLE';
PARTITION_NAME HIGH_VALUE
--------------- -----------------------------------------------------------
PT01022013 TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
PT01042013 TO_DATE(' 2013-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
PT01062013 TO_DATE(' 2013-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
PT01082013 TO_DATE(' 2013-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',