【问题标题】:Find all other tables that use a current table (oracle database)查找使用当前表的所有其他表(oracle 数据库)
【发布时间】:2014-02-20 21:45:20
【问题描述】:

我正在对一些使用 Oracle 数据库 (11g) 的旧代码进行一些分析工作。我有一个代码表,想找到调用/使用该表的所有表、触发器等(如外键引用)。我目前使用 Oracle SQL Developer,但不确定是否可以编写查询来找到它。有没有办法可以在同一架构中找到对当前表的所有引用?在此先感谢...

【问题讨论】:

    标签: sql database oracle11g


    【解决方案1】:

    您可以使用数据字典来执行此操作,但使用哪个数据字典取决于相关对象的类型。因为您要查找几种不同类型的对象,所以需要使用多个字典,而且,如果您希望在一个查询中得到全部结果,则必须通过联合将几个查询连接在一起。

    以下查询(2 个查询通过联合连接成一个)将向您显示带有引用模式 xyz 中表 xyz 的键的表,以及在模式 xyz 中使用表 xyz 的触发器名称(将表和模式名称替换为您的任何'正在搜索:

    select 'Table has key referencing this table' as match_type, table_name
      from all_constraints
     where constraint_type = 'R'
       and r_constraint_name in
           (select constraint_name
              from all_constraints
             where constraint_type in ('P', 'U')
               and table_name = 'TABLE_XYZ'
               and owner = 'SCHEMA_XYZ')
    union all
    select distinct 'Table is used by this trigger', trigger_name
      from all_triggers
     where table_name = 'TABLE_XYZ'
       and owner = 'SCHEMA_XYZ'
    

    对于其他类型的对象,使用与下一个适当的字典相同的方法,并通过联合连接。你会发现这很有帮助:

    http://www.oracle.com/pls/tahiti/tahiti.catalog_views

    请注意,我在上面的查询中使用了 all_ 字典。每个都有一个等效的 dba_ 和 user_ 字典。 all_ 充当当前登录用户(您)有权访问的所有对象的字典。 dba_ 一个充当数据库中所有对象的字典,但是您需要具有使用 dba_ 字典的权限,所以我在上面的查询中没有使用它们(如果您有访问权限,请将 all_ 替换为 dba_) . user_ 字典充当当前用户/模式拥有的所有对象的字典。

    【讨论】:

    • 完美!!!非常感谢.. 根据查询,它在 2 列中给了我很少的条目 - match_type 和 Table_name。再次感谢。
    【解决方案2】:

    除了表和触发器之外,您可能还想检查是否有任何代码对象引用了您的表。 IE。程序,包。

    所以你可以添加第三个查询:

    从所有依赖项中选择 NAME,TYPE,其中 REFERENCED_OWNER='&your_table_owner' 和 REFERENCED_NAME='&your_table_name';

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多