Pular para o conteúdo

Fóruns SQL e PL/SQL OTIMIZANDO E PONDO PRA FUNCIONADO PROCEDURE OTIMIZANDO E PONDO PRA FUNCIONADO PROCEDURE

#94706
Thiago Vilhena
Participante

    [quote=”Thunder_Catz”:32cye4aq]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..[/quote]

    MANUH TA COM ERRO

    1 create or replace procedure SP_NOVA_PARTICAO IS
    2 v_lista_particoes DBMS_UTILITY.LNAME_ARRAY;
    3 v_nova_particao varchar2(7) := to_char(SYSDATE,'YYYY_MM');
    4 cursor c1 is select distinct table_name, partition_name
    5 from user_tab_partitions
    6 where partition_name
    7 like '%'||to_char(sysdate- 10,'YYYY_MM')||'%'
    8 order by table_name desc;
    9 BEGIN
    10 DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT','''DD/MM/YYYY HH24:MI:SS''');
    11 for rec in c1 LOOP
    12 v_lista_particoes (c1%rowcount) := replace(rec.partition_name,to_char(sysdate-10,'YYYY_MM'),v_
    13 declare
    14 erro_part_existente EXCEPTION;
    15 PRAGMA EXCEPTION_INIT(erro_part_existente, -14074);
    16 BEGIN
    17 EXECUTE IMMEDIATE 'ALTER TABLE '||rec.table_name||' ADD PARTITION '||v_lista_particoes (c1%ro
    18 exception
    19 when erro_part_existente THEN
    20 -- INSERE BLOCO DE ENVIO DE E-MAIL INFORMANDO Q PARTIÇÃO JA EXISTE.
    21 END;
    22 end loop;
    23 -- INSERE BLOCO DE ENVIO DE E-MAIL PARA CONFIRMAR A CRIAÇÃO DAS PARTIÇÕES..
    24 exception
    25 when others then
    26 -- INSERE BLOCO DE ENVIO DE E-MAIL PARA INFORMAR ERRO NA CRIAÇÃO DAS PARTIÇÕES..
    27* end SP_NOVA_PARTICAO;
    SQL> /

    Advertência: Procedimento criado com erros de compilação.

    SQL> SHOW ERRORS
    Erros para PROCEDURE SP_NOVA_PARTICAO:

    LINE/COL ERROR


    21/1 PLS-00103: Encontrado o símbolo "END" quando um dos seguintes
    símbolos era esperado:
    begin case declare exit for goto if loop mod null pragma
    raise return select update while with

          << close current delete fetch lock
         insert open rollback savepoint set sql execute commit forall
         merge pipe
    

    27/1 PLS-00103: Encontrado o símbolo "END" quando um dos seguintes
    símbolos era esperado:

    LINE/COL ERROR


         begin case declare exit for goto if loop mod null pragma
         raise return select update while with 
    
          &lt; </code>
    

    ABÇ