【发布时间】:2019-01-15 16:54:11
【问题描述】:
PROCEDURE purge_partitions
(
p_owner IN VARCHAR2
,p_name IN VARCHAR2
,p_retention_period IN NUMBER
) IS
BEGIN
FOR partition_rec IN (SELECT partition_name
,high_value
FROM dba_tab_partitions
WHERE table_owner = p_owner
AND table_name = p_name)
--drop partitions older than specified retention preriod
LOOP
IF SYSDATE >= add_months(to_date(substr(partition_rec.high_value
,12
,19)
,'YYYY-MM-DD HH24:MI:SS')
,p_retention_period)
THEN
execute_immediate('ALTER TABLE ' || p_owner || '.' ||
p_name || ' DROP PARTITION ' ||
partition_rec.partition_name);
END IF;
END LOOP;
END purge_partitions;
我正在尝试为循环语句添加更多粒度,因此我希望将其延长几天,而不是仅仅每月删除分区。仅供参考,记录是从配置表中获取的,其中包括分区表的详细信息(表所有者、名称和保留期 - 数据类型 NUMBER)。因此,我不知道该怎么做。非常感谢任何帮助。
【问题讨论】:
-
你为什么一次又一次地问同样的问题? stackoverflow.com/questions/54148136/…stackoverflow.com/questions/53936930/…stackoverflow.com/questions/53837937/…(甚至一次又一次出现同样的错误)?
-
什么是
p_retention_period?几天还是几个月?甚至数周、数年、数小时……? -
@WernfriedDomscheit 首先,虽然我问的是关于相同程序的问题,但我之前问的问题与我在这篇文章中问的问题不同,所以我不确定你问的意思同样的问题一次又一次地出现同样的错误? p_retention_period 也是几个月 atm 但我想将其更改为天、周等。
-
有错我的意思是
to_date(substr(partition_rec.high_value, ...。如果您调用您的程序,例如purge_partitions('OWNER_NAME', 'TABLE_NAME', 6);- 您怎么知道6是指“6 周”还是“6 天”? -
是的,这就是我的实际问题,我如何区分代码中的 6 个月、6 周、6 天?我知道 HIGH_VALUE 问题 - 我会尽快进行更改。
标签: oracle partitioning sysdate