如何找出外键引用的表表?

时间:2016-05-06 11:27:05

标签: oracle oracle11g constraints referential-integrity

我有一个没有文档的数据库。

有一个表language_id列,它是另一个表的外键。我想知道外键引用哪个表。我不想仅仅通过仔细观察所有表格来找出因为大约有120个表格而且不幸的是这些名称并不具有描述性。

有没有办法找到它?

我正在使用SQL Developer来查询远程Oracle 11g数据库。

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容查询数据字典:

select uc_r.table_name, ucc_r.column_name, uc_r.constraint_name,
  uc_p.constraint_name, uc_p.table_name, ucc_p.column_name
from user_constraints uc_r
join user_cons_columns ucc_r on ucc_r.constraint_name = uc_r.constraint_name
join user_constraints uc_p on uc_p.constraint_name = uc_r.r_constraint_name
join user_cons_columns ucc_p on ucc_p.constraint_name = uc_p.constraint_name
and ucc_p.position = ucc_r.position
where uc_r.constraint_type = 'R';

查找所有外键约束(类型R),查找匹配的主/唯一键,并匹配两个表中的列。当然,您可以将其限制为特定的表,列或约束,但如果您尝试查找所有映射,则更广泛的视图可能会有用。

如果我创建一个虚拟的父/子关系,使用未命名的约束(这可能是你的名字不是描述性的意思):

create table language (id number primary key, name varchar2(10));
create table my_table (language_id references language(id));

然后该查询找到:

TABLE_NAME   COLUMN_NAME    CONSTRAINT_NAME  CONSTRAINT_NAME  TABLE_NAME   COLUMN_NAME   
-----------  -------------  ---------------  ---------------  -----------  ------------- 
MY_TABLE     LANGUAGE_ID    SYS_C00111327    SYS_C00111326    LANGUAGE     ID             

从SQL Developer中,您还可以打开表查看器(从连接下的扩展表列表中,在左侧面板中);初始视图显示表格列,但如果单击“约束”选项卡,它将显示相同的信息 - 以及有关约束的更多信息。这只能一次显示一张表。

答案 1 :(得分:3)

你说你正在使用SQL Developer。

所以,打开桌子。

转到约束页面。

找到你的外键。

查看R_TABLE_NAME专栏。

enter image description here