我想找到将数据插入特定表的存储过程,包,函数或触发器的名称,是否有任何内置对象以便我可以使用它。我正在搜索最近2个小时的对象名称。请帮助。
答案 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表,如下所示。
使用表 user_source
select * from user_source
where upper(text) like '%<YOUR TABLE NAME in UPPER CASE>%'
您可以从user_source,all_source,dba_source中进行选择,具体取决于您已登录的用户以及该用户的权限。
使用表 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中进行选择,具体取决于您已登录的用户以及该用户拥有的权限。