Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Jatuhkan partisi yang lebih lama dari 2 bulan

Pertama, saya ingin menunjukkan bahwa mempartisi adalah subjek lanjutan di Oracle, oleh karena itu Anda mungkin ingin menjalankan semua DDL secara manual di awal, sampai Anda cukup percaya diri dengan menjalankan skrip DDL. Saya juga menyarankan Anda untuk tidak pernah menjalankan skrip yang ditemukan di internet tanpa memiliki pemahaman dan menguji secara menyeluruh, terutama skrip DDL.

Sekarang untuk masalah yang ada, Anda dapat menanyakan *_TAB_PARTITIONS tampilan kamus untuk mengambil batas partisi:

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'

Kolom ini bertipe LONG (=deprecated LOB) jadi kami memiliki beberapa alat untuk memfilter dengan SQL, kami harus menggunakan 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', 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat Tabel Sementara Global di Oracle

  2. SQL:Penyatuan dua tabel yang tidak memiliki kecocokan kolom penuh

  3. Oracle, cara membuka kursor dan memilih satu kolom dari banyak menjadi variabel

  4. panggil prosedur tersimpan array parameter Oracle menggunakan scala / java

  5. Kesalahan PLS-00539 dan PLS-00538 saat membuat fungsi UDT