2011-03-25 38 views

回答

5

這將做到這一點,但可能產生誤報的通用列名

SELECT DISTINCT type, name 
FROM dba_source 
WHERE owner = 'OWNER' 
AND text LIKE '%COLUMN_NAME%'; 

這裏所有人是擁有你想要搜索的存儲過程的架構和COLUMN_NAME的是,你要查找的列名。如果不使用混合大小寫列名,那麼你可以用

AND UPPER(text) LIKE '%COLUMN_NAME%'; 

取代的最後一行,並在資本輸入列名,以獲得不區分大小寫的搜索。

+0

我試過我們的代碼,並得到了以下錯誤第1行錯誤 ORA-00942:表或視圖不存在。我正在使用Oracle 11g – Vani 2011-03-25 14:39:54

+2

我想你沒有訪問dba_source。改爲使用all_source。 – Lunc 2011-03-25 14:44:14

+0

謝謝!它工作gr8 !! .. – Vani 2011-03-25 15:04:15

1

沒有保證的方法,但是您可以使用regexp_like搜索user/all/dba_source來檢查整個單詞,並通過user/all/dba_dependencies交叉引用以縮小要檢查的軟件包列表。

select s.name, s.type, s.line, s.text 
from user_source s 
where ltrim(s.text,chr(9)||' ') not like '--%' 
and regexp_like(lower(s.text),'\Wyour_column_name_here\W') 
and (s.name, s.type) in 
     (select d.name, d.type 
     from user_dependencies d 
     where d.referenced_owner = user 
     and d.referenced_name = 'YOUR_TABLE_NAME_HERE'); 

,或者有可能是從其他模式對它的引用,

select s.owner, s.name, s.type, s.line, s.text 
from all_source s 
where ltrim(s.text,chr(9)||' ') not like '--%' 
and regexp_like(lower(s.text),'\Wyour_column_name_here\W') 
and (s.owner, s.name, s.type) in 
     (select d.owner, d.name, d.type 
     from all_dependencies d 
     where d.referenced_owner = user 
     and d.referenced_name = 'YOUR_TABLE_NAME_HERE'); 

你可能會使它只需使用select distinct s.owner, s.name, s.type ...獲得對象進行調查的名單。