Oracle:搜索所有存储的过程/触发器/其他数据库代码?

Posted

技术标签:

【中文标题】Oracle:搜索所有存储的过程/触发器/其他数据库代码?【英文标题】:Oracle: search though all stored procs/triggers/other db code? 【发布时间】:2011-08-09 18:41:09 【问题描述】:

是否可以在 Oracle 中跨多个模式搜索所有编程对象(函数、存储过程、触发器等)?

我的代码中有许多表似乎没有使用,但我不想在不先检查的情况下删除它们来破坏任何东西。

【问题讨论】:

【参考方案1】:

通过选择在 Toad 中执行此操作:

搜索 => 对象搜索

【讨论】:

【参考方案2】:

如果你有Toad,你可以做这个内置的。 (出于隐私考虑,我删除了我的架构)

【讨论】:

您能分享一下您是如何进入该对话框的吗?在哪里可以找到该对话框的选项?【参考方案3】:

可以通过对象代码进行搜索——您通常使用 DBMS_METADATA 包为对象生成 DDL,然后搜索 CLOB。但是,这听起来并不是您真正想要做的。

如果您只是想弄清楚系统中的任何代码是否引用了某个表,您通常需要使用DBA_DEPENDENCIES 视图(或ALL_DEPENDENCIESUSER_DEPENDENCIES,具体取决于您的权限和范围你在找什么)。类似的东西

SELECT *
  FROM dba_dependencies
 WHERE referenced_owner = 'SCOTT'
   AND referenced_name  = 'EMP'
   AND referenced_type  = 'TABLE'

将向您显示依赖于 SCOTT 架构中的 EMP 表的所有内容。

您唯一想要搜索代码而不是查看DBA_DEPENDENCIES 的情况是,当您的代码执行动态SQL 时,表名是硬编码的。但这在实践中相对不太可能。

【讨论】:

我很好奇 - 是否还会检查,例如,过程 A 是否依赖于依赖表 C 的视图 B?还是需要分层查询? @Adam - 你需要一个层次查询。这只会告诉您视图 B 依赖于表 C。Oracle 为此在 %ORACLE_HOME%\rdbms\admin 中提供了一个 utldtree 脚本。 想想我一直都是自己写的。我不知道 utldtree 存在。【参考方案4】:

您可以搜索 DBA_SOURCE 视图:

SELECT *
  FROM dba_source
 WHERE UPPER(text) LIKE '%YOUR_TABLE_NAME%';

【讨论】:

以上是关于Oracle:搜索所有存储的过程/触发器/其他数据库代码?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 将存储过程复制到远程数据库

oracle存储过程和存储函数&触发器

Oracle Day09 存储与触发器

oracle 11g 带触发器的存储过程

请问ora2pg如何使用,如何将oracle数据库中的函数,表,存储过程,数据,触发器等移植到postgresql里呢

在 Oracle 存储过程中搜索文本