找到哪个oracle数据库对象将数据插入特定表?

时间:2016-01-11 12:02:23

标签: oracle stored-procedures oracle11g toad

我想找到将数据插入特定表的存储过程,包,函数或触发器的名称,是否有任何内置对象以便我可以使用它。我正在搜索最近2个小时的对象名称。请帮助。

4 个答案:

答案 0 :(得分: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查询时,这将返回。任何动态查询都完全失控。

答案 1 :(得分:0)

您可以尝试使用以下内容分析数据库的所有来源:

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

这种方法的优点是你甚至可以获得动态代码; con是你甚至可以选择,更新,......

答案 2 :(得分:0)

如果表是静态引用的,您可以查看ALL_DEPENDENCIES视图

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

这将找到所有用法,而不仅仅是插入

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

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

仅当INSERT和您的表位于同一行时,才能找到该用法。

但是,如果命令是更加动态构建的,那么你就不会那么简单地找到它。

答案 3 :(得分: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中进行选择,具体取决于您已登录的用户以及该用户拥有的权限。