在Oracle中如何在关键字中找到外文参考栏?

时间:2018-10-07 16:08:45

标签: sql oracle

我试图弄清楚如何查找外键引用的列的名称。

这是一个示例,请记住,我正在尝试动态查找数百张表。

  • 小工具
    • ID
    • COMPONENT_ID
    • ...
  • PART
    • ID
    • NAME
    • ....

WIDGET.COMPONENT_IDPART.ID

的外键

我有一个查询来找到PART(表名),但是我不知道如何从PART.ID中找到WIDGET_COMPONENT_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_FKPART之类的东西。尽管不确定,如何从COMPONENT_ID_FK转到PART.ID

1 个答案:

答案 0 :(得分:1)

此查询帮助我获得了所需的信息:

SELECT * FROM all_cons_columns WHERE constraint_name IN ( SELECT c_pk.constraint_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.column_name = 'COMPONENT_ID' AND a.table_name = 'WIDGET' )