为了清理数据,往往需要删除一些分区
简单查看当前分区
附件
--创建测试表
-- drop table test_part purge;CREATE TABLE test_part (sales_id NUMBER,sale_date DATE,amount NUMBER
)
PARTITION BY RANGE (sale_date)
INTERVAL (INTERVAL '1' MONTH) -- 每个月创建一个分区
(PARTITION p_initial VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')) -- 初始分区,包含2025年1月之前的数据
);--插入测试数据
insert into test_part values(1,sysdate-500,10);
insert into test_part values(2,sysdate-30,20);
insert into test_part values(3,sysdate+20,30);
commit;--显示表结构
desc TEST_PART--显示表定义
set pages 100
SET LONG 999 LONGCHU 10000
SELECT DBMS_METADATA.GET_DDL('TABLE', 'TEST_PART', 'SYS') FROM DUAL;--查看当前分区
set line 200
col table_name for a12
col TABLESPACE_NAME for a12
col PARTITION_NAME for a12
col HIGH_VALUE for a88
select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,TABLESPACE_NAME,NUM_ROWS from DBA_tab_partitions where TABLE_NAME='TEST_PART';--查看分区high_value
col PARTITION for a20
with xml as (
select dbms_xmlgen.getxmltype('select table_name, partition_name, high_value from user_tab_partitions where table_name = ''TEST_PART''') as x
from dual)
select extractValue(rws.object_value, '/ROW/TABLE_NAME') table_name,
extractValue(rws.object_value, '/ROW/PARTITION_NAME') partition,
extractValue(rws.object_value, '/ROW/HIGH_VALUE') high_value
from xml x,table(xmlsequence(extract(x.x, '/ROWSET/ROW'))) rws ORDER BY extractValue(rws.object_value, '/ROW/HIGH_VALUE');--不是很严谨的过滤(extractValue的结果该用什么转换为日期呢?)
select table_name,partition, high_value from (with xml as (select dbms_xmlgen.getxmltype('select table_name, partition_name, high_value from user_tab_partitions where table_name = ''TEST_PART''') as xfrom dual)select extractValue(rws.object_value, '/ROW/TABLE_NAME') table_name,extractValue(rws.object_value, '/ROW/PARTITION_NAME') partition,extractValue(rws.object_value, '/ROW/HIGH_VALUE') high_valuefrom xml x,table(xmlsequence(extract(x.x, '/ROWSET/ROW'))) rws ORDER BY extractValue(rws.object_value, '/ROW/HIGH_VALUE')) where high_value>'TO_DATE('' 2025-04-01' ;
过滤掉想要的分区