需要帮助来优化 Oracle 查询

问题描述 投票:0回答:1

鉴于以下示例数据,我正在尝试识别过去几年(即 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

sql oracle-database
1个回答
0
投票

您可以使用常规函数,该函数应根据当前提供的命名方法提取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
© www.soinside.com 2019 - 2024. All rights reserved.