我怎样才能找到哪些表在Oracle SQL Developer中引用给定的表?(How can I

2019-06-14 20:33发布

在Oracle SQL Developer中 ,如果我看桌子上的信息,我可以查看的限制,这让我看到(这表由该表中引用,从而)的外键,我可以看到的依赖关系,看看有什么包和这样的参考表。 但我不知道如何找到哪些表引用表。

例如,假设我在看的emp表。 还有一个表emp_dept捕获这名员工在哪些部门工作,其中引用了emp通过表emp_id的主键emp表。 有没有一种方法(通过一些UI元素在节目中,不是通过SQL)的发现, emp_dept表引用emp表,没有我知道的是, emp_dept表是否存在?

Answer 1:

有号可从Oracle SQL Developer中没有这样的选择。

您必须手动执行一个查询,或者使用其他工具(如PLSQL开发者具有这样的选项)。 下面的SQL是一个由PLSQL开发人员使用:

select table_name, constraint_name, status, owner
from all_constraints
where r_owner = :r_owner
and constraint_type = 'R'
and r_constraint_name in
 (
   select constraint_name from all_constraints
   where constraint_type in ('P', 'U')
   and table_name = :r_table_name
   and owner = :r_owner
 )
order by table_name, constraint_name

r_owner是模式,并r_table_name是您正在寻找的参考表。 该名称是区分大小写


要小心,因为Oracle SQL Developer的报告选项卡上有选项“中的所有表/相关性”,这是从ALL_DEPENDENCIES是指过程,包,功能,包装机构之间的依赖,并触发当前用户,包括依赖性访问没有任何数据库链接创建的视图“。 。 然后,这份报告对你的问题没有价值。



Answer 2:

把它添加到SQL Developer作为一个扩展执行以下操作:

  1. 下面的代码保存到一个XML文件(如fk_ref.xml):
<items>
    <item type="editor" node="TableNode" vertical="true">
    <title><![CDATA[FK References]]></title>
    <query>
        <sql>
            <![CDATA[select a.owner,
                            a.table_name,
                            a.constraint_name,
                            a.status
                     from   all_constraints a
                     where  a.constraint_type = 'R'
                            and exists(
                               select 1
                               from   all_constraints
                               where  constraint_name=a.r_constraint_name
                                      and constraint_type in ('P', 'U')
                                      and table_name = :OBJECT_NAME
                                      and owner = :OBJECT_OWNER)
                               order by table_name, constraint_name]]>
        </sql>
    </query>
    </item>
</items>
  1. 添加扩展SQL开发:

    • 工具>首选项
    • 数据库>用户定义的扩展
    • 点击“添加行”按钮
    • 在类型中选择“编辑器”,定位是保存在XML文件上方
    • 单击“确定”,然后重新启动SQL开发
  2. 导航到任何表,你现在应该可以看到旁边的SQL一个额外的标签,标记FK引用,这显示新的FK信息。

  3. 参考

    • http://www.oracle.com/technetwork/issue-archive/2007/07-jul/o47sql-086233.html


Answer 3:

EMP在下面的查询替换[你TABLE]

select owner,constraint_name,constraint_type,table_name,r_owner,r_constraint_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='[YOUR TABLE]');


Answer 4:

SQL Developer的4.1,在2015年5月发布,增加了模型选项卡,显示其是指你的表中的实体关系图格式表的外键。



Answer 5:

您可以从查询此ALL_CONSTRAINTS观点:

SELECT table_name
FROM ALL_CONSTRAINTS
WHERE constraint_type = 'R' -- "Referential integrity"
  AND r_constraint_name IN
    ( SELECT constraint_name
      FROM ALL_CONSTRAINTS
      WHERE table_name = 'EMP'
        AND constraint_type IN ('U', 'P') -- "Unique" or "Primary key"
    );


Answer 6:

怎么样是这样的:

SELECT c.constraint_name, c.constraint_type, c2.constraint_name, c2.constraint_type, c2.table_name
  FROM dba_constraints c JOIN dba_constraints c2 ON (c.r_constraint_name = c2.constraint_name)
 WHERE c.table_name = <TABLE_OF_INTEREST>
   AND c.constraint_TYPE = 'R';


Answer 7:

这已经在该产品年 - 虽然它不是在产品于2011年。

但是,只要点击型号页面上。

请确保你至少4.0版(2013年发布)来访问此功能。



Answer 8:

SELECT DISTINCT table_name, 
                constraint_name, 
                column_name, 
                r_table_name, 
                position, 
                constraint_type 
FROM   (SELECT uc.table_name, 
               uc.constraint_name, 
               cols.column_name, 
               (SELECT table_name 
                FROM   user_constraints 
                WHERE  constraint_name = uc.r_constraint_name) r_table_name, 
               (SELECT column_name 
                FROM   user_cons_columns 
                WHERE  constraint_name = uc.r_constraint_name 
                       AND position = cols.position)           r_column_name, 
               cols.position, 
               uc.constraint_type 
        FROM   user_constraints uc 
               inner join user_cons_columns cols 
                       ON uc.constraint_name = cols.constraint_name 
        WHERE  constraint_type != 'C') 
START WITH table_name = '&&tableName' 
           AND column_name = '&&columnName' 
CONNECT BY NOCYCLE PRIOR table_name = r_table_name 
                         AND PRIOR column_name = r_column_name; 


Answer 9:

要添加到SQL Developer的插件上面的回答,使用下面的XML将获得与外键关联的列帮助。

    <items>
        <item type="editor" node="TableNode" vertical="true">
        <title><![CDATA[FK References]]></title>
        <query>
            <sql>
                <![CDATA[select a.owner,
                                a.constraint_name,
                                a.table_name,
                                b.column_name,
                                a.status
                         from   all_constraints a
                         join   all_cons_columns b ON b.constraint_name = a.constraint_name
                         where  a.constraint_type = 'R'
                                and exists(
                                   select 1
                                   from   all_constraints
                                   where  constraint_name=a.r_constraint_name
                                          and constraint_type in ('P', 'U')
                                          and table_name = :OBJECT_NAME
                                          and owner = :OBJECT_OWNER)
                                   order by table_name, constraint_name]]>
            </sql>
        </query>
        </item>
    </items>


文章来源: How can I find which tables reference a given table in Oracle SQL Developer?