【问题标题】:Error : Last partition in a range section cannot be dropped错误:不能删除范围部分中的最后一个分区
【发布时间】:2021-12-13 11:15:00
【问题描述】:

我有以下过程,但抛出以下错误:不能删除范围部分中的最后一个分区

我的代码:

create or replace procedure DEMO_DROP_P
AS

CURSOR A1 AS
select PARTITION_NAME,HIGH_VALUE from MY_PART_HIVE;

BEGIN
FOR 
   LOOP
    EXECUTE IMMEDIATE 'alter table my_abc_table drop partition ' || partition_name || '';
   END LOOP;
END   

表格中的数据: MY_PART_HIVE

TBL_NAME | PARTITION |HIVE_VALUE
ABC      | V1        | 1
ABC      | SYS_V1123 | 3456
ABC      | SYS_V1113 | 456
ABC      | SYS_V1013 | 56

【问题讨论】:

  • abc 是否只有这 4 个分区?如果是这样,当最后一个分区被删除时,您希望发生什么?您不能拥有没有分区的分区表。你可以放下桌子。但在这种情况下,一个一个地删除分区是没有意义的。
  • @JustinCave :它可以有更多,只是我发布的几个例子
  • 问题依旧。您不能删除一张表中的所有分区,至少需要保留其中一个。在您的示例中,您没有过滤光标中的任何内容,因此您想要删除所有分区。这没有任何意义,如果要删除所有分区,只需删除表即可。如果不这样做,请过滤光标以仅获取要删除的分区
  • @JustinCave :你能帮我解决需要放弃所有但不是 V1 和 1
  • 你想要实现的逻辑到底是什么?删除除hive_value 最低的分区以外的所有分区?删除除dba_tab_partitions 中具有最低partition_position 的分区以外的所有分区?删除所有不以 'SYS%' 开头的分区?还有什么?

标签: sql oracle stored-procedures


【解决方案1】:

我假设您要删除所有分区,除了一个。虽然我真的不明白你想要完成什么删除除一个以外的所有分区。

最简单的方法

create or replace procedure DEMO_DROP_P
is
begin
for i in ( select PARTITION_NAME from MY_PART_HIVE 
where partition_name != 'V1' ) 
   LOOP
    EXECUTE IMMEDIATE 'alter table my_abc_table drop partition ' || i.partition_name || '';
   END LOOP;
END;

但您应该考虑构建更通用的东西,同时使用通用的 Oracle 字典视图。

create or replace procedure DEMO_DROP_P ( powner in varchar2 , ptablename in varchar2, ppart_to_keep in varchar2 )
is
begin
for i in ( select PARTITION_NAME from all_tab_partitions where table_owner = upper(powner) and table_name = upper(ptablename)  
           abd partition_name != upper(ppart_to_keep)
         ) 
   LOOP
    EXECUTE IMMEDIATE 'alter table '||powner||'.'||ptablename||' drop partition ' || i.partition_name || '';
   END LOOP;
exception when others then raise;
END;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多