如何在Oracle SQL Developer中找到哪些表引用给定表?

Rud*_*ski 188 sql oracle foreign-keys oracle-sqldeveloper

Oracle SQL Developer中,如果我正在查看表中的信息,我可以查看约束,这可以让我看到外键(以及此表引用哪些表),并且我可以查看依赖项以查看内容包等参考表.但我不知道如何找到哪些表引用该表.

例如,假设我正在看emp桌子.还有另一个表emp_dept,用于捕获哪些员工在哪些部门(emp通过该表引用表emp_id)的主键中工作emp.有没有办法(通过程序中的某些UI元素,而不是通过SQL)找到emp_dept表引用emp表,而不必知道emp_dept表存在?

Fer*_*anB 246

不可以.Oracle SQL Developer没有这样的选项.

您必须手动执行查询或使用其他工具(例如PLSQL Developer有此选项).以下SQL是PLSQL Developer使用的SQL:

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
Run Code Online (Sandbox Code Playgroud)

r_owner架构在哪里,并且r_table_name是您正在寻找引用的表.名称区分大小写


要小心,因为在Oracle SQL Developer的"报告"选项卡上有"All tables/Dependencies"选项,它来自ALL_DEPENDENCIES,它指的是" 当前用户可访问的过程,包,函数,包体和触发器之间的依赖关系,包括依赖关系创建没有任何数据库链接的视图." .然后,此报告对您的问题没有任何价值.

  • 谢谢你的回答.耻辱Oracle Sql Developer吮吸. (28认同)
  • @Nicholas,在对象浏览器中,选择一个表,右键单击表并选择"外键引用" (4认同)
  • [这个答案](http://stackoverflow.com/a/31926359/919057)引用SQL Developer 4.1及更高版本现在有一个选项"模型"选项卡,它将以ERD格式显示此信息. (3认同)

小智 106

要将此作为扩展添加到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>
Run Code Online (Sandbox Code Playgroud)
  1. 将扩展添加到SQL Developer:

    • 工具>首选项
    • 数据库>用户定义的扩展
    • 单击"添加行"按钮
    • 在类型中选择"编辑器",位置是您保存上面的xml文件的位置
    • 单击"确定",然后重新启动SQL Developer
  2. 导航到任何表,您现在应该看到SQL 1旁边的另一个选项卡,标记为FK References,它显示新的FK信息.

  3. 参考

  • 你太棒了. (5认同)
  • @ M-Denis,在这种情况下,您可能会错过其他模式的引用. (3认同)

lex*_*exu 33

在下面的查询中用emp替换[Your 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]');
Run Code Online (Sandbox Code Playgroud)


Mar*_*ald 9

2015年5月发布的SQL Developer 4.1添加了一个Model选项卡,显示了以实体关系图格式引用表的表外键.

  • 如果您出于某种原因在脚本中需要它,则不太有用,但如果您只需要了解连接,这似乎是现代的方法。 (2认同)

Ada*_*ter 8

您可以从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"
    );
Run Code Online (Sandbox Code Playgroud)


小智 5

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; 
Run Code Online (Sandbox Code Playgroud)


tha*_*ith 5

这在产品中已经存在多年了——尽管它在 2011 年没有出现在产品中。

但是,只需单击“模型”页面。

确保您至少使用 4.0 版(2013 年发布)才能访问此功能。

在此处输入图片说明