Oracle 从数据字典中查找包全局变量

Oracle 从数据字典中查找包全局变量,oracle,global-variables,package,system-views,Oracle,Global Variables,Package,System Views,我有一个包裹: CREATE PACKAGE my_pkg IS g_var NUMBER; END; / 是否有任何方法可以查询SYS视图,以发现此包具有此全局变量?我对显式变量名和数据类型感兴趣 附言。 正在分析用户\u源不计算在内 编辑:我希望在不引入getter/setter函数的情况下完成此操作。您可以使用包中的函数公开它: FUNCTION FN_get_g_var RETURN number IS BEGIN return g_var; END FN_get_g

我有一个包裹:

CREATE PACKAGE my_pkg
IS
g_var NUMBER;
END;
/
是否有任何方法可以查询SYS视图,以发现此包具有此全局变量?我对显式变量名和数据类型感兴趣

附言。 正在分析用户\u源不计算在内


编辑:我希望在不引入getter/setter函数的情况下完成此操作。

您可以使用包中的函数公开它:

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;

没有包含此信息的sys视图。在这里,您可能最好使用user\u source或all\u source(我知道您说过这不算,但我认为这是您在这里所能做的最好的)


话虽如此,如果对全局变量使用标准的g_u前缀,那么解析所有的_u源真的那么糟糕吗?我认为您可以编写一个PL/SQL来循环源代码并搜索“g”。这可能需要一些调整和实验,但我认为值得一试。

作为我自己的参考,这里有一个从数据字典中获取信息的查询-

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