鉴于以下示例数据,我正在尝试识别过去几年(即 2024 年及之前)的空分区。
该架构还包含带有未来日期分区的分区表。
样本数据如下。
schema_name table_name Partition Name Row_count
A tab1 P202512 0
A tab1 P202601 0
A tab1 P202701 0
A tab1 P202702 0
我写了以下查询。
SELECT table_owner, table_name, partition_name, num_rows
FROM dba_tab_partitions
where table_owner not in ('AUDSYS', 'SYS', 'SYSTEM')
AND num_rows < 1
AND partition_name NOT LIKE '%2025%'
AND partition_name NOT LIKE '%2026%'
AND partition_name NOT LIKE '%2027%'
AND partition_name NOT LIKE '%2028%'
AND partition_name NOT LIKE '%2029%'
AND partition_name NOT LIKE '%2030%'
order by TABLE_OWNER, TABLE_NAME, partition_name, num_rows;
查询可以工作,但不是很健壮。有什么方法可以让它更加动态(即不必对未来几年进行硬编码)?
提前致谢。
rogers7942
您可以使用常规函数,该函数应根据当前提供的命名方法提取partition_name列值的数字部分,例如
SELECT table_owner, table_name, partition_name, num_rows
FROM user_tab_partitions
WHERE TO_NUMBER(REGEXP_REPLACE(partition_name,'[^0-9]')) < 202500
AND NVL(num_rows,-1) = 0