declare 
  -- Local variables here
  V_COUNT integer;
begin

  for r_tab_part in
  ( select t.table_name, t.partition_name
    from user_tab_partitions t
    where t.table_name not in ('BCK_CRM_VALIDAZIONE_IN', 'BCK_CRM_VALIDAZIONE_OUT')
      and t.partition_position =
        ( select  max(t1.partition_position)-1
          from user_tab_partitions t1
          where t1.table_name = t.table_name
        )
  )
  loop
    -- split della partizione da eliminare
    begin
      execute immediate('ALTER TABLE '|| r_tab_part.table_name ||'
      SPLIT PARTITION ' || r_tab_part.partition_name || ' AT (TO_DATE('' 2013-01-01 00:00:00'', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN''))
      INTO (PARTITION T4_2012, PARTITION ' ||r_tab_part.partition_name||') UPDATE GLOBAL INDEXES');
      
      EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||r_tab_part.TABLE_NAME||' PARTITION ('||r_tab_part.partition_name||')'INTO V_COUNT;
      
      IF V_COUNT = 0 THEN
      
        EXECUTE IMMEDIATE 'alter table '||r_tab_part.TABLE_NAME||' drop partition '||r_tab_part.partition_name||' update global indexes';
      
      ELSE
        DBMS_OUTPUT.put_line('Impossibile eliminare la partizione ' || r_tab_part.partition_name || ' della tabella '|| r_tab_part.TABLE_NAME
        || ' per la presenza di record');
        
      END IF;
    
    exception when others then
      DBMS_OUTPUT.put_line('Errore nello spilt della partizione ' || r_tab_part.partition_name || ' della tabella '|| r_tab_part.TABLE_NAME
        || ' ' || SQLERRM);
    end;
    
  end loop;
  
end;
/