【发布时间】:2018-10-07 16:08:44
【问题描述】:
我试图弄清楚如何查找外键引用的列的名称。
这是一个演示示例,请记住,我正在尝试动态查找数百个表。
- 小工具
- 身份证
- COMPONENT_ID
- ...
- 部分
- 身份证
- 姓名
- ....
WIDGET.COMPONENT_ID 是 PART.ID 的外键
我有一个查询要查找 PART(表名),但我不知道如何从 WIDGET_COMPONENT_ID 找到 PART.ID。
编辑:
我正在尝试找出引用的列名。我可以找到表名,但不知道如何找到列名。
编辑 2:
(来自List of foreign keys and the tables they reference的sql) 例如,我可以通过以下方式获取约束名称:
SELECT c_pk.constraint_name, c_pk.table_name r_table_name
FROM all_cons_columns a
JOIN all_constraints c ON a.owner = c.owner
AND a.constraint_name = c.constraint_name
JOIN all_constraints c_pk ON c.r_owner = c_pk.owner
AND c.r_constraint_name = c_pk.constraint_name
WHERE c.constraint_type = 'R'
AND a.table_name = 'WIDGET'
这让我得到了类似COMPONENT_ID_FK 和PART 的信息。如何从COMPONENT_ID_FK 到PART.ID 虽然我不确定。
【问题讨论】:
-
@Corion 实际上不是。我找到的最接近的是stackoverflow.com/questions/1729996/…,但它只会让你得到表名而不是被引用的列
-
哦,确实,这只是答案的一半。一个约束可以有多个列名,因此您还需要通过 docs.oracle.com/cd/B28359_01/server.111/b28320/… 查找该约束。如果你有一个表+约束的例子,我可以通过 SQLFiddle 提供一个解决方案,所以可以发布吗?
-
@Corion 更新了更多信息
-
@bob-jaris,这个问题是我链接到的那个问题的欺骗,它只返回表名,而不是该表名中主键列的名称。这就是我要问的问题