2009-12-16 53 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_」。這可能需要一些調整和實驗,但我認爲這值得嘗試。