2009-12-16 15 views
4

J'ai un paquet:variables globales Rechercher un paquetage de dictionnaire de données

CREATE PACKAGE my_pkg 
IS 
g_var NUMBER; 
END; 
/

Est-il possible que je peux interroger des vues SYS, pour trouver que ce paquet a cette variable globale? Je suis intéressé par le nom de variable explicite et le type de données.

P.S. L'analyse de la ressource utilisateur ne compte pas. Edit: Je voudrais faire cela sans introduire les fonctions getter/setter.

Répondre

0

Pour ma référence, voici une requête qui obtient cette information de dictionnaire de données -

select name as variable_name, object_name as package_name, object_type 
from dba_identifiers a 
where usage_context_id = 1 
    and usage = 'DECLARATION' 
    and type = 'VARIABLE' 
start with object_type in ('PACKAGE', 'PACKAGE BODY') 
connect by prior usage_id = usage_context_id 
    and object_name = prior object_name 
    and object_type = prior object_type 
2

Vous pouvez l'exposer avec une fonction dans le package:

FUNCTION FN_get_g_var RETURN number 
IS BEGIN 
    return g_var; END 
FN_get_g_var ; 

Et dans la vue

CREATE VIEW myView AS 
SELECT my_pkg.FN_get_g_var() FROM DUAL; 
3

Il n'y a pas une vue sys qui contient ces informations. Le mieux que vous pouvez probablement faire ici est d'utiliser user_source ou all_source (je sais que vous avez dit que cela ne compte pas, mais je pense que c'est le meilleur que vous pouvez faire ici). Cela dit, si vous utilisez le préfixe g_ standard pour vos globals, l'analyse de all_source est-elle vraiment si mauvaise? Je pense que vous pourriez écrire un PL/SQL pour faire une boucle sur la source et rechercher "g_". Il faudra probablement quelques ajustements et expérimentations, mais je pense que ça vaut la peine d'essayer.