4

我有一个包裹:

CREATE PACKAGE my_pkg
IS
g_var NUMBER;
END;
/

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

PS 解析 user_source 不算。

编辑:我想在不引入 getter/setter 函数的情况下做到这一点。

4

3 回答 3

3

没有包含此信息的系统视图。您可能在这里可以做的最好的事情是使用 user_source 或 all_source (我知道您说过这不算数,但我认为这是您可以在这里做的最好的事情)。

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

于 2009-12-16T14:46:58.023 回答
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;
于 2009-12-16T14:46:15.313 回答
2

供我自己参考,这是一个从数据字典中获取该信息的查询 -

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
于 2017-03-27T08:38:10.473 回答