查找哪个 oracle 数据库对象将数据插入特定 table?
Find which oracle database object inserts data into a particular table?
我想找到将数据插入特定 table 的存储过程、程序包、函数或触发器的名称,是否有任何内置对象以便我可以使用它。我正在搜索过去 2 小时内对象的名称。请帮忙。
您可以尝试使用如下方式分析您的数据库的所有源代码:
select *
from dba_source
where upper(text) like '%TABLE_NAME%'
这种方法的优点是您将获得均匀的动态代码;缺点是您甚至会 select、更新...
如果 table 是静态引用的,您可以检查 ALL_DEPENDENCIES
视图
SELECT * FROM ALL_DEPENDENCIES WHERE REFERENCED_NAME = '<your table>';
这将找到所有用法,而不仅仅是插入
您也可以在源代码中搜索:
SELECT * FROM ALL_SOURCE WHERE UPPER(TEXT) LIKE '%INSERT%<your table>%'
仅当 INSERT
和您的 table 在同一行时,才会找到用法。
但是,如果命令是动态构建的,那么您将不会发现它那么简单。
您找不到插入的 PL/SQL 块,但您可以尝试识别引用它的 procedures/functions。并增加找到的机会。
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;
上述查询将 return table 个对象,引用此 table。
请注意,当您仅使用 STATIC
查询时,这会 return。任何动态查询,都是完全不可控的。
您可以使用 user_source 或 user_dependencies table,如下所示。
使用tableuser_source
select * from user_source
where upper(text) like '%<YOUR TABLE NAME in UPPER CASE>%'
您可以 select 从 user_source , all_source , dba_source 取决于您登录的用户和该用户拥有的权限。
使用tableuser_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>'
您可以 select 从 user_dependencies , all_dependencies , dba_dependencies 取决于您登录的用户和该用户拥有的权限。
我想找到将数据插入特定 table 的存储过程、程序包、函数或触发器的名称,是否有任何内置对象以便我可以使用它。我正在搜索过去 2 小时内对象的名称。请帮忙。
您可以尝试使用如下方式分析您的数据库的所有源代码:
select *
from dba_source
where upper(text) like '%TABLE_NAME%'
这种方法的优点是您将获得均匀的动态代码;缺点是您甚至会 select、更新...
如果 table 是静态引用的,您可以检查 ALL_DEPENDENCIES
视图
SELECT * FROM ALL_DEPENDENCIES WHERE REFERENCED_NAME = '<your table>';
这将找到所有用法,而不仅仅是插入
您也可以在源代码中搜索:
SELECT * FROM ALL_SOURCE WHERE UPPER(TEXT) LIKE '%INSERT%<your table>%'
仅当 INSERT
和您的 table 在同一行时,才会找到用法。
但是,如果命令是动态构建的,那么您将不会发现它那么简单。
您找不到插入的 PL/SQL 块,但您可以尝试识别引用它的 procedures/functions。并增加找到的机会。
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;
上述查询将 return table 个对象,引用此 table。
请注意,当您仅使用 STATIC
查询时,这会 return。任何动态查询,都是完全不可控的。
您可以使用 user_source 或 user_dependencies table,如下所示。
使用tableuser_source
select * from user_source where upper(text) like '%<YOUR TABLE NAME in UPPER CASE>%'
您可以 select 从 user_source , all_source , dba_source 取决于您登录的用户和该用户拥有的权限。
使用tableuser_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>'
您可以 select 从 user_dependencies , all_dependencies , dba_dependencies 取决于您登录的用户和该用户拥有的权限。