› Fóruns › SQL e PL/SQL › OTIMIZANDO E PONDO PRA FUNCIONADO PROCEDURE › OTIMIZANDO E PONDO PRA FUNCIONADO PROCEDURE
Opa..
Ta ai Thiago..
Agora vc edita o LESS THAN conforme sua necessidade.. eu deixei o padrão que vc havia dito.. YYYY_MM
Ve se lhe ajuda.. e cria um JOB ou SCHEDULER para rodar isto todos os dias 27 de cada mês..!!
create or replace procedure SP_NOVA_PARTICAO IS
v_lista_particoes DBMS_UTILITY.LNAME_ARRAY;
v_nova_particao varchar2(7) := to_char(SYSDATE,'YYYY_MM');
cursor c1 is select distinct table_name, partition_name
from user_tab_partitions
where partition_name
like '%'||to_char(sysdate- 10,'YYYY_MM')||'%'
order by table_name desc;
BEGIN
DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT','''DD/MM/YYYY HH24:MI:SS''');
for rec in c1 LOOP
v_lista_particoes (c1%rowcount) := replace(rec.partition_name,to_char(sysdate-10,'YYYY_MM'),v_nova_particao);
declare
erro_part_existente EXCEPTION;
PRAGMA EXCEPTION_INIT(erro_part_existente, -14074);
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE '||rec.table_name||' ADD PARTITION '||v_lista_particoes (c1%rowcount)||' VALUES LESS THAN ('||to_char(add_months(sysdate,2),'YYYYMM')||') TABLESPACE ';
exception
when erro_part_existente THEN
-- INSERE BLOCO DE ENVIO DE E-MAIL INFORMANDO Q PARTIÇÃO JA EXISTE.
end;
end loop;
-- INSERE BLOCO DE ENVIO DE E-MAIL PARA CONFIRMAR A CRIAÇÃO DAS PARTIÇÕES..
exception
when others then
-- INSERE BLOCO DE ENVIO DE E-MAIL PARA INFORMAR ERRO NA CRIAÇÃO DAS PARTIÇÕES..
end SP_NOVA_PARTICAO;
Qualquer coisa.. posta aqui…!!
Abraços..