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

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

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

【问题讨论】:

    标签: oracle stored-procedures triggers replace


    【解决方案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%';
      

      【讨论】:

        猜你喜欢
        • 2011-04-09
        • 2013-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多