全局變量我有一個包:查找軟件包從數據字典
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_」。這可能需要一些調整和實驗,但我認爲這值得嘗試。