【发布时间】: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