web-dev-qa-db-fra.com

Comment savoir si un package, une procédure ou une fonction PL/SQL est utilisé?

Comment savoir si un package, une procédure ou une fonction PL/SQL est utilisé? Existe-t-il une table ou une vue Oracle contenant des statistiques sur l'utilisation du package, de la procédure ou de la fonction PL/SQL?

16
plsql_4_life

Vous pouvez également essayer d'interroger USER/ALL_source:

SELECT * FROM all_source
where UPPER(TEXT) like UPPER('%procedure_name%')

ou

SELECT * FROM all_source
where UPPER(TEXT) like UPPER('%package.function_name%')

Vous devrez ignorer les références personnelles, mais cela devrait être facile à repérer.

Vous aurez également besoin de vérifier "voir" la source de l'utilisateur/all_views. Voir l’autre question sur l’interrogation de la source de la vue.

vous pouvez également vérifier si un package ou une fonction/procédure de niveau supérieur est utilisé avec

select * from all_dependencies
where referenced_name like '%PACKAGE_NAME%';

NB: changez user_ avec all_/dba_ si nécessaire

si vous recherchez spécifiquement des fonctions non appelées, une autre option consiste à compiler votre code avec WARNINGS activé, puis à rechercher PLW-06002 et LPW-06006.

exec DBMS_WARNING.add_warning_setting_cat('ALL','ENABLE','SESSION')
create or replace function x return number
as
procedure y is begin null; end;
begin
return 0;
return 1;
end;

show errors

Errors for FUNCTION X:

LINE/COL ERROR
-------- -----------------------------------------------------------------
1/1      PLW-05018: unit X omitted optional AUTHID clause; default value DEFINER used
3/1      PLW-06006: uncalled procedure "Y" is removed.
6/1      PLW-06002: Unreachable code
14
ShoeLace

Pas par défaut. Mais vous pouvez utiliser la fonctionnalité audit de votre base de données Oracle. At Ask Tom _ est un long fil sur l'audit des appels de procédure!

5
Tim

Si vous utilisez Oracle 11 (R2?), Je donnerais une chance à PL/Scope

Le document indique: PL/Scope est un outil piloté par le compilateur qui collecte des données sur les identifiants dans le code source PL/SQL au moment de la compilation par unité de programme et les rend disponibles dans des vues de dictionnaire de données statiques. Les données collectées incluent des informations sur les types d'identifiant, les utilisations (déclaration, définition, référence, appel, affectation) et l'emplacement de chaque utilisation dans le code source.

PL/Scope permet le développement de navigateurs de code source PL/Scope puissants et efficaces qui augmentent la productivité des développeurs PL/SQL En réduisant le temps passé à parcourir et à comprendre le code source.

Vous trouverez plus d'informations à ce sujet sur http://download.Oracle.com/docs/cd/E11882_01/appdev.112/e17125/adfns_plscope.htm#g1010526

3
René Nyffenegger

Vous pouvez voir si un objet a des dépendances en interrogeant la table DBA_DEPENDENCIES.

SELECT OWNER, 
       NAME, 
       TYPE 
  FROM SYS.DBA_DEPENDENCIES 
 WHERE REFERENCED_OWNER = '<your object owner>' 
   AND REFERENCED_NAME = '<your object name>'
   AND REFERENCED_TYPE IN ('PACKAGE', 'PROCEDURE', 'FUNCTION');

Cette requête renvoie toutes les dépendances dans le code stocké dans l'instance Oracle elle-même.

Il ne révélera pas si un objet est appelé ou non en dehors de l'instance.

1
JordanBean

Vous pouvez utiliser des éditeurs comme Toad. Ils listeront directement à la fois les objets dont dépend votre procédure et les objets qui référencent votre procédure.

1
Abhishek Kapoor

Vous pourriez aussi trouver le paquet d'instrumentation pl/sql ILO utile pour ce que vous essayez de faire.

0
Jim Hudson