sql >> Databáze >  >> RDS >> Oracle

Zrušte oddíly starší než 2 měsíce

Nejprve bych rád poukázal na to, že dělení je v Oracle pokročilý předmět, a proto možná budete chtít na začátku spouštět všechny DDL ručně, dokud si nebudete dostatečně jisti spouštěním skriptů DDL. Také bych vám doporučil, abyste nikdy nespouštěli skript nalezený na internetu, aniž byste oba rozuměli a testování důkladně, zejména skripty DDL.

Nyní se můžete zeptat na *_TAB_PARTITIONS zobrazení slovníku pro načtení hranice oddílu:

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'

Tento sloupec je typu LONG (=zastaralý LOB), takže máme málo nástrojů pro filtrování pomocí SQL, budeme muset použít 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. MySQL - SELECT a poté UPDATE

  2. Vygenerujte jedinečné dlouhé ID pro pohled v MySql

  3. Spojte 2 tabulky na dynamicky se měnícím sloupci

  4. Najděte studenty, kteří se zaregistrovali do obou dvou kurzů