2014-02-20 57 views
1

我正在使用一些使用Oracle數據庫(11g)的舊代碼進行一些分析工作。我有一個代碼表,並希望找到所有調用/使用此表(如外鍵引用)的表,觸發器等。我目前使用Oracle SQL Developer,但不確定是否可以編寫查詢來查找。有沒有一種方法可以在同一個Schema中找到對當前表的所有引用?在此先感謝...查找所有其他使用當前表的表(oracle數據庫)

回答

0

您可以使用數據字典來執行此操作,但要使用哪個數據字典取決於所討論的對象的類型。因爲你想找到幾種不同類型的對象,所以你需要使用多個字典,如果你想在一個查詢中得到全部結果,你將不得不通過聯合連接幾個查詢。

以下查詢(通過聯合將兩個查詢連接成一個)將顯示具有在xyz模式中引用表xyz的鍵的表以及在模式xyz中使用表xyz的觸發器的名稱(將表和模式名替換爲您正在搜索的:

select 'Table has key referencing this table' as match_type, table_name 
    from all_constraints 
where constraint_type = 'R' 
    and r_constraint_name in 
     (select constraint_name 
      from all_constraints 
     where constraint_type in ('P', 'U') 
      and table_name = 'TABLE_XYZ' 
      and owner = 'SCHEMA_XYZ') 
union all 
select distinct 'Table is used by this trigger', trigger_name 
    from all_triggers 
where table_name = 'TABLE_XYZ' 
    and owner = 'SCHEMA_XYZ' 

對於其他類型的對象,使用同樣的方法與下一個適當的字典,並連接由工會,你會發現這是很有幫助的。

http://www.oracle.com/pls/tahiti/tahiti.catalog_views

請注意,我在上面的查詢中使用了all_字典。每個都有一個等效的dba_和user_字典。 all_ ones充當當前登錄的用戶(您)可以訪問的所有對象的字典。 dba_用作數據庫中所有對象的字典,但您需要有權使用dba_字典,因此我沒有在上面的查詢中使用它們(如果您有權訪問,請將all_替換爲dba_) 。 user_dictionaries充當當前用戶/模式擁有的所有對象的字典。

+0

完美!非常感謝..它給了我很少的條目在2列 - match_type和Table_name根據查詢。再次感謝。 – Sara

0

在表和觸發器之上,您可能還需要檢查是否有任何代碼對象引用了您的表。即。程序,包。

所以,你可以添加第三個查詢:

選擇名稱,類型從all_dependencies其中REFERENCED_OWNER = '& your_table_owner' 和REFERENCED_NAME = '& your_table_name';

相關問題