oracle如何列出特定存储过程中使用的所有表

Posted

技术标签:

【中文标题】oracle如何列出特定存储过程中使用的所有表【英文标题】:How to list all the tables used in a particular stored procedure in oracle 【发布时间】:2014-01-20 14:24:17 【问题描述】:

我需要获取在 oracle 中特定存储过程中使用的所有表的列表。如何使用查询获取该列表?

【问题讨论】:

试试这个answer。 我不知道Oracle的具体情况,但是应该有一些方法可以在不实际执行的情况下检索SP的执行计划。这会告诉你你想知道什么(还有更多)。 @Lotharyx 存储过程本身没有执行计划,尽管它们包含的查询可能。 【参考方案1】:

Dynamic SQLs 被跳过,因为它们在编译期间没有在SEMANTIC 检查中得到验证

select 
   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 
     proc_syn.name= 'YOUR_PROC' 
  AND 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'
order by 
  proc_syn.referenced_owner, syn_tab.table_name;

【讨论】:

添加 proc_syn.name= 'PROC_NAME'【参考方案2】:
select 
   referenced_owner, 
   referenced_name, 
   referenced_type
from 
   dba_dependencies
where 
   name= 'PROC_NAME' AND REFERENCED_TYPE = 'TABLE'
order by 
   referenced_owner, referenced_name, referenced_type;

【讨论】:

您是否将 PROC_NAME 替换为您的过程名称?我已经尝试过了,它正在工作 是的,我用我的 sp 名称替换了它,但它没有给出结果 显示您的确切代码,并注意动态 sql 中引用的对象将不包括在内。

以上是关于oracle如何列出特定存储过程中使用的所有表的主要内容,如果未能解决你的问题,请参考以下文章

查询以列出存储过程中使用了哪些表

我需要使用啥 SQL 来列出 Oracle 数据库上的所有存储过程?

如何创建可以返回特定实体以及所有实体的 Oracle 存储过程

如何使用plsql导出oracle数据建表语句,存储过程,视图.以及表中数据

以编程方式:列出在实体框架模型中找到的所有存储过程

列出Oracle数据库中的所有存储过程