sql >> データベース >  >> RDS >> Oracle

2か月より古いパーティションを削除する

    まず、パーティショニングはOracleの高度なテーマであるため、DDLスクリプトの実行に十分な自信が持てるようになるまで、最初にすべてのDDLを手動で実行することをお勧めします。また、理解の両方がなければ、インターネットで見つかったスクリプトを実行しないことをお勧めします。 それとテスト 特にDDLスクリプトを徹底的に説明します。

    これで、当面の問題について、にクエリを実行できます。 *_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', 
    



    1. PgAdmin4はデバッグを有効にします

    2. MSAccessのテーブル関係の種類

    3. Postgresql UUIDはHibernateでサポートされていますか?

    4. PHPの有効期限