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

日付に基づいて複数のインターバルパーティションを削除するにはどうすればよいですか?

    このようにPL/SQLを使用できます。

    DECLARE
        CANNOT_DROP_LAST_PARTITION EXCEPTION;
        PRAGMA EXCEPTION_INIT(CANNOT_DROP_LAST_PARTITION, -14758);
    
       ts TIMESTAMP;
    BEGIN
       FOR aPart IN (SELECT PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'MY_TABLE') LOOP
          EXECUTE IMMEDIATE 'BEGIN :ret := '||aPart.HIGH_VALUE||'; END;' USING OUT ts;
          IF ts < SYSTIMESTAMP - INTERVAL '15' DAY THEN
          BEGIN
             EXECUTE IMMEDIATE 'ALTER TABLE MY_TABLE DROP PARTITION '||aPart.PARTITION_NAME|| ' UPDATE GLOBAL INDEXES';
          EXCEPTION
                WHEN CANNOT_DROP_LAST_PARTITION THEN
                    EXECUTE IMMEDIATE 'ALTER TABLE MY_TABLE SET INTERVAL ()';
                    EXECUTE IMMEDIATE 'ALTER TABLE MY_TABLE DROP PARTITION '||aPart.PARTITION_NAME;
                    EXECUTE IMMEDIATE 'ALTER TABLE MY_TABLE SET INTERVAL( INTERVAL ''1'' DAY )';            
          END;
          END IF;
       END LOOP;
    END;
    


    1. 大学院レベルのエラー処理

    2. SQLiteで現在の時刻を取得する方法

    3. [ビデオ]AnsibleとPostgreSQL

    4. MySQLデータベースのパフォーマンスを提供するためのヒント-パート1-