全局变量我有一个包:查找软件包从数据字典
CREATE PACKAGE my_pkg
IS
g_var NUMBER;
END;
/
有没有什么办法可以查询SYS意见,发现这个包有这个全局变量?我对显式变量名称和数据类型感兴趣。
P.S. 解析user_source不计数。
编辑:我想这样做,而不会引入getter/setter函数。
全局变量我有一个包:查找软件包从数据字典
CREATE PACKAGE my_pkg
IS
g_var NUMBER;
END;
/
有没有什么办法可以查询SYS意见,发现这个包有这个全局变量?我对显式变量名称和数据类型感兴趣。
P.S. 解析user_source不计数。
编辑:我想这样做,而不会引入getter/setter函数。
对于我自己的参考,在这里是一个查询,会从数据字典的信息 -
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
你可以在包的功能将其暴露:
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_source或all_source(我知道你说这不算,但我认为这是你能做的最好的)。那么,如果你为你的全局变量使用标准的g_前缀,那么解析all_source真的很不好吗?我想你可以编写一个PL/SQL来遍历源代码并搜索“g_”。这可能需要一些调整和实验,但我认为这值得尝试。