如何通过在分区中然后在子分区中过滤值来编写选择plSQL脚本

问题描述

我有一个包含分区和子分区的表。我必须首先过滤分区的High_Value(TO_DATE('2020-03-29 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR = GREGORIAN')的结果日期值,然后在结果集中使用Subpartion High值和一些文本值进行过滤,如果条件满足,则删除该子分区。在下面给出代码之前,我已经编写了代码,但是不确定如何继续进行。有人可以帮忙介绍如何声明d_tmp,然后遍历每个子区域并检查

DECLARE
CURSOR get_parts IS
select partition_name,high_value
from ALL_TAB_PARTITIONS
where table_name = 'TempTable';
l_tmp LONG;
d_tmp DATE;
BEGIN
  FOR part_rec IN get_parts
  LOOP
    l_tmp := part_rec.high_value;
    EXECUTE IMMEDIATE 'SELECT ' || SUBSTR(l_tmp,1,90) || ' FROM DUAL' INTO d_tmp;
    DBMS_OUTPUT.PUT_LINE( to_char(d_tmp,'DD-MM-YYYY'));
       
  END LOOP;
END;

解决方法

大部分时间都在那儿。您只需在该分区的子分区周围循环

DECLARE
CURSOR get_parts IS
select partition_name,high_value
from ALL_TAB_PARTITIONS
where table_name = 'TEMPTABLE';
l_tmp LONG;
d_tmp DATE;

l_tmp2 LONG;

BEGIN
  FOR part_rec IN get_parts
  LOOP
    l_tmp := part_rec.high_value;
    EXECUTE IMMEDIATE 'SELECT ' || SUBSTR(l_tmp,1,90) || ' FROM DUAL' INTO d_tmp;
    DBMS_OUTPUT.PUT_LINE( to_char(d_tmp,'DD-MM-YYYY'));
       
    for i in ( 
      select subpartition_name,high_value
      from ALL_TAB_SUBPARTITIONS
      where table_name = 'TEMPTABLE'
      and partition_name = get_parts.partition_name
      )
    loop
      l_tmp2 := i.high_value;
      --
      -- your checks
      --
      if [checks passed] then
        execute immediate 'alter table TEMPTABLE drop subpartition '||i.subpartition_name;
      
    end loop;
       
  END LOOP;
END;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...