2017-08-28 50 views
-1

是否有可能使用PL/SQL在特定過程中獲取使用列的列表?我必須在我的Oracle數據庫中檢查500多個程序,並打印出它們中使用的所有列。如何查找存儲過程中使用的列

+0

如果另一個過程將查詢中的某些列從本地變量中取出並將這些變量傳遞給您的過程會怎麼樣?如果某些查詢計算表達式如'column1 + column2 * column3作爲new_alias',然後將此別名傳遞給您的過程? – krokodilko

+0

你有什麼奇怪的任務。假設你有一個程序打開一個sys_refcursor,就像這個'select * from some_table',然後讀入一個記錄,其中的字段名稱不同。在這種情況下考慮使用哪些列? – wolfrevokcats

回答

1

出乎意料的是,甲骨文確實使計算表中可供觀賞的PL/SQL依賴:

select * from user_dependencies -- can also use all_ or dba_dependencies 
where type = 'PROCEDURE' and REFERENCED_TYPE = 'TABLE'; 

但如果你真的需要列級依賴關係,我認爲這將是困難得多。這是一個非常簡單的答案,可以說明問題的一些問題。

select name, type, line, text, table_name, column_name 
from user_source 
join user_tab_cols 
    on text like '%'|| column_name || '%'; 

因此,您可以搜索所有過程,查找與現有列名稱匹配的任何字符串。我可以想到這種方法的幾十個問題;上面的評論者提到了其中的一些,比如你想要看多少調用堆棧。或者根據您的列的命名方式,不明確的名稱(SID,MODIFIED_DATE等)將生成重複的條目。而且無法區分實際引用列名和局部變量碰巧拼寫相同。或評論。而意見或同義詞可能會使你的搜索失敗。這似乎是一個非常棘手的問題。我希望user_dependencies的表格足以滿足您的需求。

相關問題