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

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

【问题讨论】:

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

标签: oracle plsql


【解决方案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 中引用的对象将不包括在内。
猜你喜欢
  • 2017-07-10
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2011-10-20
  • 2013-11-01
  • 2015-09-18
相关资源
最近更新 更多