Une procédure PL/SQL pour supprimer toutes les procédures existantes dans Oracle

[ 1 ] Commentaire
Share

Un rapide billet pour vous donner une procédure PL/SQL permettant de supprimer toutes les autres procédures stockées dans Oracle. Sachant que j’utilise actuellement Oracle SQL Developer au boulot, et qu’il n’est pas possible de sélectionner plusieurs procédures pour les supprimer toutes en même temps, j’ai cherché un peu sur le web et trouver 2-3 bouts pour construire cette méthode, permettant de supprimer toutes les procédures dont le nom commence par XYZ (XYZ est une chaine de caractère désignant par quoi commence les procédures stockées à supprimer).

Attention, on voit dans la requête de création qu’on filtre les procédures par l’attribut objet_type. Pour faire la même chose sur les fonctions, il suffit de remplacer object_type = ‘PROCEDURE’ par object_type = ‘FUNCTION’ .

create or replace procedure abcdefghi (debut_nomproc in varchar2)
is
  stmt_str VARCHAR2(18000);
cursor combi
          is select object_name from user_objects u_o where u_o.object_type = 'PROCEDURE' and u_o.object_name like debut_nomproc||'%';
begin
   FOR r in combi
    LOOP 
            stmt_str := 'DROP PROCEDURE '||r.object_name||' '  ;
            EXECUTE IMMEDIATE stmt_str;
            COMMIT WORK;
    END LOOP;
end;
/

execute abcdefghi('T');

Recompiler toutes les procédures stockées

Il arrive que Oracle présente les procédures stockées comme non valide. Il suffit alors de les recompiler une par une pour les voir « compilées ». D’où une procédure, basée sur le code ci-dessus, pour les recompiler toutes.


create or replace procedure APROC_RECOMPILE_TOUS (debut_nomproc in varchar2)
is
  stmt_str VARCHAR2(18000);
cursor combi
          is select object_name from user_objects u_o where u_o.object_type = 'PROCEDURE' and u_o.object_name like debut_nomproc||'%';
begin
   FOR r in combi
    LOOP
            stmt_str := 'ALTER PROCEDURE '||r.object_name||' COMPILE'  ;
            EXECUTE IMMEDIATE stmt_str;
            COMMIT WORK;
    END LOOP;
end;
/

execute APROC_RECOMPILE_TOUS('%');

Vous serez peut-être intéressé :

Un commentaire sur ce billet

  1. Franck dit :

    Merci pour l’infos 🙂

    RépondreRépondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *