2016-01-11 53 views

回答

1

您找不到插入的PL/SQL塊,但您可以嘗試確定引用它的過程/函數。並增加你找到的機會。

select 
    proc_syn.nam, 
    proc_syn.referenced_owner, 
    proc_syn.referenced_name, 
    proc_syn.referenced_type, 
    syn_tab.table_name 
from 
    dba_dependencies proc_syn, dba_synonyms syn_tab, dba_tables tables 
where 
     REFERENCED_TYPE in ('SYNONYM','TABLE') 
    AND proc_syn.referenced_name = syn_tab.synonym_name 
    AND syn_tab.synonym_name = tables.table_name 
    AND syn_tab.owner = 'PUBLIC' 
    AND REFERENCED_NAME = 'YOUR_TABLE_NAME' 
order by 
    proc_syn.referenced_owner, syn_tab.table_name; 

上述查詢將返回引用此表的表對象。

請注意,如果僅使用STATIC查詢,則會返回。任何動態查詢都完全失控。

+0

謝謝,它幫助! –

0

您可以通過分析你的數據庫的所有源與這樣的嘗試:

select * 
from dba_source 
where upper(text) like '%TABLE_NAME%' 

這種方法的好處在於,你會得到甚至是動態的代碼; con是,你甚至有選擇,更新,...

0

如果表是靜態引用您可以檢查ALL_DEPENDENCIES視圖

SELECT * FROM ALL_DEPENDENCIES WHERE REFERENCED_NAME = '<your table>'; 

這會發現所有的用法,不僅插入

您也可以在源代碼中搜索:

SELECT * FROM ALL_SOURCE WHERE UPPER(TEXT) LIKE '%INSERT%<your table>%' 

這會發現只有INSERT和你的表是在同一條線上使用。

但是,如果命令的構建更動態,那麼您不會那麼簡單。

0

您可以像下面那樣使用user_source或user_dependencies表。

  1. 使用表USER_SOURCE

    select * from user_source 
    where upper(text) like '%<YOUR TABLE NAME in UPPER CASE>%' 
    

    您可以從USER_SOURCE,ALL_SOURCE選擇,這取決於用戶dba_source你登錄和權限用戶擁有。

  2. 使用表user_dependencies

    SELECT NAME FROM user_dependencies WHERE referenced_name = '<YOUR TABLE NAME in UPPER CASE>' 
    UNION 
    SELECT referenced_name FROM user_dependencies WHERE name = '<YOUR TABLE NAME in UPPER CASE>' 
    

    從根據用戶user_dependencies,all_dependencies,dba_dependencies你登錄和權限用戶具有可以選擇。