2009-12-16 52 views
4

全局变量我有一个包:查找软件包从数据字典

CREATE PACKAGE my_pkg 
IS 
g_var NUMBER; 
END; 
/

有没有什么办法可以查询SYS意见,发现这个包有这个全局变量?我对显式变量名称和数据类型感兴趣。

P.S. 解析user_source不计数。

编辑:我想这样做,而不会引入getter/setter函数。

回答

0

对于我自己的参考,在这里是一个查询,会从数据字典的信息 -

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

你可以在包的功能将其暴露:

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

并在视图

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

没有包含此信息的SYS视图。你可以在这里最好的做法是使用user_source或all_source(我知道你说这不算,但我认为这是你能做的最好的)。那么,如果你为你的全局变量使用标准的g_前缀,那么解析all_source真的很不好吗?我想你可以编写一个PL/SQL来遍历源代码并搜索“g_”。这可能需要一些调整和实验,但我认为这值得尝试。