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). Поэтому я не уверен, как это сделать. Любая помощь высоко ценится.
p_retention_period
? Дни или месяцы? Или даже недели, годы, часы, ...? - person Wernfried Domscheit   schedule 15.01.2019to_date(substr(partition_rec.high_value, ...
. Если вы называете свою процедуру, например, какpurge_partitions('OWNER_NAME', 'TABLE_NAME', 6);
- как вы узнаете, означает ли6
6 недель или 6 дней? - person Wernfried Domscheit   schedule 16.01.2019