Re: Recompile Invalid Objects - The Brute Solution

From: Matthias Rogel <rogel_at_web.de>
Date: Mon, 16 Dec 2002 07:11:27 +0100
Message-ID: <atjqqg$14hkqs$1_at_ID-86071.news.dfncis.de>


dr. Matteo Vitturi wrote:
> Goodnight!
> Is it true? The ultimate solution to recompile all and only invalid objects?
> Give a look to the following link.
>
> http://www.geocities.com/matteo_vitturi/english/plsql.htm
>
> Regards.
> Mat.

hi,

I'm quite happy with the brute solution

create

   procedure recompile_invalid_objects is    cursor inv is

     SELECT object_type, object_name
     FROM user_objects
     WHERE STATUS = 'INVALID';
     anz integer;
     anz_pref integer;
   begin
      select count(*) into anz
      FROM user_objects
      WHERE STATUS = 'INVALID';

      if anz = 0 then return; end if;
      anz_pref := anz + 1;

      while anz_pref > anz and anz > 0 loop
         for inv_rec in inv loop
            if inv_rec.object_type like '% BODY' then
               begin
                  execute immediate 'alter ' || 
substr(inv_rec.object_type, 1, instr(inv_rec.object_type, ' BODY') - 1) ||
                                    ' "' || inv_rec.object_name || '" 
compile body';
               exception when others then null;
               end;
            else
               begin
                  execute immediate 'alter ' || inv_rec.object_type || ' 
"' || inv_rec.object_name || '" compile';
               exception when others then null;
               end;
            end if;
         end loop;

         anz_pref := anz;

         select count(*) into anz
         FROM user_objects
         WHERE STATUS = 'INVALID';


      end loop;

      if anz > 0 then
         declare errm varchar2(2048);
         begin
            errm := 'The following ' || anz || ' Objects compiled with 
error:';
            for inv_rec in inv loop
               if length(errm) < 1950 then
                  errm := errm || chr(10) || inv_rec.object_name || ' (' 
|| inv_rec.object_type || ')';
               else
                  errm := errm || chr(10) || '...';
                  exit;
               end if;
            end loop;
            raise_application_error(-20001, errm);
         end;
      end if;

   end recompile_invalid_objects;

which does not care about dependencies and right orders at all, but does a great job !!

Matthias Received on Mon Dec 16 2002 - 07:11:27 CET

Original text of this message