Boa tarde,
Sei que o post é antigo, mas a título de informação e caso possa servir de ajuda, fica como consulta.
Mas há algum tempo eu precisei criar uma rotina de expurgo automatizada para uma tabela particionada com alta volumetria e basicamente eu fiz o seguinte:
Criei um CURSOR para fazer a leitura de todas as partições da tabela:
Selecionar tudo
SELECT TO_DATE(TRIM( SUBSTR( TO_CHAR(SYS_DBURIGEN(DTP.TABLE_OWNER, PARTITION_NAME, DTP.HIGH_VALUE,'text()').GETCLOB()),INSTR(TO_CHAR(SYS_DBURIGEN(DTP.TABLE_OWNER, PARTITION_NAME, DTP.HIGH_VALUE,'text()').GETCLOB()), '(')+3
,INSTR(TO_CHAR(SYS_DBURIGEN(DTP.TABLE_OWNER, PARTITION_NAME, DTP.HIGH_VALUE,'text()').GETCLOB()), ' ')
)
),'RRRR-MM-DD') AS DATE_HIGH_VALUE
,DTP.TABLE_OWNER AS TABLE_OWNER
,DTP.TABLE_NAME AS TABLE_NAME
,DTP.PARTITION_NAME AS PARTITION_NAME
FROM ALL_TAB_PARTITIONS DTP
WHERE DTP.TABLE_OWNER = C_OWNER
AND DTP.TABLE_NAME = C_TABLE_NAME_CP
AND TO_DATE(TRIM( SUBSTR( TO_CHAR(SYS_DBURIGEN(DTP.TABLE_OWNER, PARTITION_NAME, DTP.HIGH_VALUE,'text()').GETCLOB()),INSTR(TO_CHAR(SYS_DBURIGEN(DTP.TABLE_OWNER, PARTITION_NAME, DTP.HIGH_VALUE,'text()').GETCLOB()), '(')+3
,INSTR(TO_CHAR(SYS_DBURIGEN(DTP.TABLE_OWNER, PARTITION_NAME, DTP.HIGH_VALUE,'text()').GETCLOB()), ' ')
)
),'RRRR-MM-DD') < TRUNC(SYSDATE) - P_CUR_PERIODO
Onde, o parâmetro:
P_CUR_PERIODO, é utilizado para determinar o período que deverá ser excluído.
Depois eu montei um procedimento, onde faço a exclusão das partições da seguinte forma:
Selecionar tudo
OPEN C_DATE_HIGH_VALUE(L_QT_PARAM);
LOOP
FETCH C_DATE_HIGH_VALUE INTO R_DATE_HIGH_VALUE;
BEGIN
--
EXECUTE IMMEDIATE 'ALTER TABLE ' || REC_ALL_TAB_PARTITIONS.TP_TABLE_OWNER || '.' || REC_ALL_TAB_PARTITIONS.TP_TABLE_NAME ||
' DROP PARTITION ' || REC_ALL_TAB_PARTITIONS.TP_PARTITION_NAME;
--
EXCEPTION
WHEN OTHERS THEN
BEGIN
--
L_LINHA := $$PLSQL_LINE;
L_MSG_ERROR := SQLERRM;
RAISE E_RAISE_DROP;
--
END;
END;
EXIT WHEN C_DATE_HIGH_VALUE%NOTFOUND;
END LOOP;
Observação: Os procedimento listados acima, estão resumidos, porém, você pode adaptar conforme a sua necessidade.
No meu caso eu tenho uma tabela de parametrização, a onde eu defino o número de dias que deverão ser excluídos no parâmetro: L_QT_PARAM.
Att.